На этот вопрос уже есть ответ здесь:
У меня есть следующий сценарий bash:
#!/bin/bash
mysqldump -u ******** -p******** --all-databases | gzip > /home/srvlinux01/MySQLBackups/database_$(date +\%Y-\%m-\%d).sql.gz
, который находится в / home / srvlinux01 / MySQLBackups /
в качестве резервной копии . sh
со следующими разрешениями
-rwxr--r-- 1 root root 134 feb 27 12:48 backup.sh
Я установил задание cron на sudo crontab -e
, чтобы запускать его каждый день, ночью
#Automatic MySQL backup
30 3 * * * sh /home/srvlinux01/MySQLBackups/backup.sh
Но мне по электронной почте приходит следующая ошибка:
sh: 0: Can't open /home/srvlinux01/MySQLBackups/backup.sh
Я пробовал разные настройки, но не могу понять, что не так. Я могу запустить скрипт вручную, и все идет отлично, поэтому я предполагаю, что что-то не так с моей записью cronjob, но не могу понять, что именно. Не могли бы вы помочь мне разобраться? Спасибо!
Вы забыли точку "." до пути исполнения.
30 3 * * * sh ./home/srvlinux01/MySQLBackups/backup.sh
^
Я вижу одну ошибку в вашей конфигурации файла crontab. В приведенной ниже конфигурации вы пытаетесь вызвать backup.sh
так же, как в командной строке с префиксом sh
, который может не работать в cron.
#Automatic MySQL backup
30 3 * * * sh /home/srvlinux01/MySQLBackups/backup.sh
Решение: chmod a+x <filename>
Обновите свой crontab, чтобы отразить это. (вызывая файл напрямую, оболочка используется в соответствии со строкой shebang внутри файла)
#Automatic MySQL backup
30 3 * * * /home/srvlinux01/MySQLBackups/backup.sh
Надеюсь, это поможет.
Вам нужно дать своему крону PATH
. Например:
SHELL=/bin/sh PATH=/bin:/sbin:/usr/bin:/usr/sbin
В вашем случае попробуйте поставить перед вашей командой. Обратитесь к вики сообщества по этому вопросу для получения дополнительной информации о том, зачем нужна переменная PATH
. Вот выдержка; По сути, идея состоит в том, что cron не читает /etc/environment
:
Распространенной «ошибкой» является то, что переменная окружения PATH отличается. Может быть, ваш скрипт cron использует команду
BLOCKQUOTE>somecommand
из/opt/someApp/bin
, которую вы добавили вPATH
в/etc/environment
? cron не читает этот файл, поэтому запускsomecommand
из вашего скрипта завершится неудачно при запуске с cron, но будет работать при запуске в терминале. Чтобы обойти это, просто установите собственную переменнуюPATH
в верхней части скрипта.
chmod +x /home/srvlinux01/MySQLBackups/backup.sh
попробуйте запустить скрипт с полным путем в командной строке:
/home/srvlinux01/MySQLBackups/backup.sh
, если он не запущен - что-то не так (ошибка пути)
Убедитесь, что это ваш crontab
crontab -e
no sudo:
sudo crontab -e
является корневым crontab - и root не может найти ваш скрипт;)
удалите «sh» в crontab просто напишите:
30 3 * * * /home/srvlinux01/MySQLBackups/backup.sh