4

Я настраиваю свой сервер Debian для резервного копирования моих баз данных с помощью crontab, утилиты mysqldump и gunzip.

По некоторым причинам мои строки crontab, кажется, терпят неудачу, особенно критическая:

15 2 * * * /usr/bin/mysqldump --user=root --password=XXX --all-databases | /bin/gzip > /backup/database_`date '+%d-%m-%Y'`.sql.gz

Я прочитал несколько примеров о возможном происхождении этого поведения, но все еще не вижу причины, по которой этому заданию crontab все еще не удается создать файл после I:

  • Использовал права root: я использую sudo crontab -e для редактирования корневого crontab.
  • Использовал whereis, чтобы найти полные пути команд, которые я использую, заменив, например, mysqldump на /usr/bin/mysqldump .
  • Проверено, что вся строка работает под root: он создает архив с текущей датой, заполненный результатом mysqldump (показывает предупреждение, потому что я использую пароль в CLI, но я не думаю, что это вызовет какие-либо проблемы с crontab, верно?)

Я полагаю, что-то не так в настройке этой строки в crontab, но я не вижу этого.

Очевидно, crontab работает правильно, потому что, когда я добавляю строку * * * * * env > /backup/env.txt я получаю файл, содержащий содержимое env в папке /backup ...

Будет ли кто-нибудь иметь представление об этом?

Спасибо !

~ Stéphane

2 ответа2

2

Путь по умолчанию для cron:

PATH=/usr/bin:/usr/sbin:.

Утилита date находится в /bin/ поэтому вам необходимо:

  1. явно добавить этот каталог в PATH для cron

    PATH=/bin/:/usr/bin:/usr/sbin:.
    15 2 * * * mysqldump --user=root --password=XXX --all-databases | gzip > /backup/database_$(date '+%d-%m-%Y').sql.gz
    

или же

  1. укажите полный путь к команде date :

    15 2 * * * /usr/bin/mysqldump --user=root --password=XXX --all-databases | /bin/gzip > /backup/database_$(/bin/date '+%d-%m-%Y').sql.gz
    

Я предпочитаю первый вариант, так как второй способ позволяет слишком легко ошибиться и забыть предоставить полный путь для всех команд (например, date в вашем вопросе).

2

ОК, я нашел то, что не работает для меня:

Подбирая /var/log/syslog , я обнаружил, что crontab имеет ограничение размера строки! Таким образом, при чтении строки она остановилась: ... $(date +' что делает строку "ошибкой" при исполнении.

Моим решением было перенести работу в скрипт /root/backup.sh и отредактировать crontab, используя:

15 2 * * * /root/backup.sh

По крайней мере, теперь я могу сделать резервную копию моих данных!

Я надеюсь, что это решение поможет другим;)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .