У меня есть следующее cron
задание:
* * * * * /home/db_backups/test.sh
, которое работает нормально и выполняется каждую минуту. Если я проверяю с помощью sudo grep \(CRON\) /var/log/syslog
, я получаю следующее:
Jun 23 11:30:01 analytics CRON[9301]: (CRON) info (No MTA installed, discarding output)
Однако, если я изменяю исполняемый файл на inreadobase_backup.sh
:
* * * * * /home/db_backups/inreadobase_backup.sh
, скрипт не запускается - я не вижу записей в журнале. Исполняемый файл, если выполняется сам по себе, выполняет работу без ошибок. Вот содержимое файла:
sudo mysqldump -h example.com -u username -ppassword dbname | gzip > db.zip
Оба исполняемых файла имеют разрешения на выполнение, предоставленные каждому. Куда мне обратиться, чтобы точно определить проблему?
РЕДАКТИРОВАТЬ
Задание успешно выполняется и создает резервные копии, если я добавлю в sudo crontab -e
следующую строку:
*/5 * * * * mysqldump -h example.com -u username -ppassword dbname | gzip > db.zip
Однако, если я переместлю строку выполнения mysqldump... db.zip
в файл inreadobase_backup.sh
и укажу ее для задания:
*/5 * * * * /home/db_backups/inreadobase_backup.sh
задание не создаст резервные копии. Я не знаю, как проверить, работает ли он и какую ошибку он выдает, если таковая имеется. Если я просто выполню /home/db_backups/inreadobase_backup.sh
в командной строке, резервная копия будет создана. И единственная строка, которую содержит файл, такова:
mysqldump -h example.com -u username -ppassword dbname | gzip > db.zip
Я предполагаю, что Вы добавили это как crontab Вашего собственного пользователя. Проблема состоит в том, что cron
не имеет никакого способа пройти проверку подлинности к sudo
, таким образом, это не может выполнить Вашу команду. Самый простой путь вокруг этого состоит в том, чтобы добавить crontab к root
учетная запись вместо этого:
sudo crontab -e
Затем добавьте эту строку:
* * * * * mysqldump -h example.com -u username -ppassword dbname | gzip > db.zip
нет никакой потребности в сценарии для чего-то настолько простого, таким образом, можно также добавить саму команду. Так или иначе Вы не хотите использовать sudo
с ним.
Для исключения различных возможных сложностей сделайте inreadobase_backup.sh
, похожи на это:
#!/bin/sh
/usr/bin/mysqldump -h example.com -u username -ppassword dbname | /bin/gzip > /home/maximus/db.zip
Затем для фиксации любых ошибок, перенаправляют вывод ошибок сценария в файл путем добавления 2> file
к Вашему cron
строка:
*/5 * * * * /home/db_backups/inreadobase_backup.sh 2> /tmp/cron.error
можно затем проверить /tmp/cron.error
на большее количество деталей.