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
Другие вопросы по тегам