Я настраиваю свой сервер 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/
поэтому вам необходимо либо:
явно добавьте этот каталог в
PATH
forcron
PATH=/bin/:/usr/bin:/usr/sbin:. 15 2 * * * mysqldump --user=root --password=XXX --all-databases | gzip > /backup/database_$(date '+%d-%m-%Y').sql.gz
или
укажите полный путь к
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
По крайней мере, теперь я могу сделать резервную копию своих данных!!
Надеюсь, это решение поможет другим ;)