root crontab не выполняется

root crontab не выполняется

Я настраиваю свой сервер 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 по-прежнему не создает файл после того, как я:

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

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

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

Может, кто-нибудь знает об этом?

Спасибо !

~Стефан

решение1

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

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

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

  1. явно добавьте этот каталог в PATHforcron

    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

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

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

Связанный контент