Crontab запись не работает
У меня есть это в crontab.(В /etc)
Я отредактировал файл как root.
Скрипт отлично работает, когда запускается автономно, но не в crontab.
@daily root /home/andy/bin/Backup_18_04.sh
1 ответ
Чтобы определить, есть ли проблемы в каком-либо скрипте в crontab, мы должны проверить системный журнал, используя команду
less -S /var/log/syslog
и ищет линии CRON и ищет связанные сообщения об ошибках.
Другой способ упростить этот анализ - добавить явный файл журнала в определение cron, например:
@daily root /home/andy/bin/Backup_18_04.sh >/home/andy/backup.log 2>&1
Символ> перенаправляет весь вывод скрипта в файл, а 2>&1 перенаправляет все сообщения об ошибках в один и тот же уже перенаправленный выходной файл (1 - это внутренний дескриптор, в котором все программы по умолчанию отправляют обычные сообщения, а 2 - для ошибки, поэтому 2>&1 заставляет 'канал' 2 соединяться с копией 'канала' 1). ВАЖНО: определение строки должно заканчиваться символом новой строки.
Я предпочитаю использовать обычную систему CRON, настроенную через crontab -e
; это только кажется сложным, потому что это имеет большую гибкость. Например, вы можете запускать сценарий ежедневно в 3:25, используя:
#MINUTE HOUR DAYOFMONTH MONTH DAYOFWEEK COMMAND
25 3 * * * /home/andy/bin/Backup_18_04.sh >/home/andy/backup.log 2>&1
Звездочки означают "все" для каждого поля, поэтому "все дни всех месяцев в любой день недели в час 3 и минуту 25" cron выполняет сценарий и сохраняет его обычные сообщения и сообщения об ошибках, если они есть, в файле /home/andy/backup.log
,
Слово @daily
вы использовали эквивалентно 0 0 * * *
, ежедневно в 0:00.
Кроме того, имя пользователя после указания времени используется только в /etc/crontab, а не в сценариях, созданных с помощью crontab -e (поскольку пользователь является создателем по умолчанию).
Два других важных аспекта - объявление сценария исполняемым и указание того, какой интерпретатор оболочки его обработает. Сделать скрипт исполняемым легко с помощью следующей команды:
chmod a+x /home/andy/Backup_18_04.sh
Чтобы указать интерпретатор оболочки, в самой первой строке скрипта должны быть символы фунт / восклицательный знак #!
и желаемый путь оболочки (это называется "шебанг"), например:
#!/bin/bash
Это приведет к обработке сценария интерпретатором оболочки Bash.
Для получения дополнительной информации о формате строки crontab прочитайте соответствующее руководство, используя команду:
man 5 crontab