Почему мой cron-скрипт для выгрузки базы данных MySQL не выполняется?

У меня есть следующее 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
3
задан 25 June 2014 в 14:16

1 ответ

Я предполагаю, что Вы добавили это как 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 на большее количество деталей.

7
ответ дан 25 June 2014 в 14:16

Другие вопросы по тегам:

Похожие вопросы: