Я предпочитаю помещать запланированные задачи в / etc / crontab, чтобы сразу увидеть, что запланировано для запуска, независимо от того, от имени какого пользователя запускается задача.
Единственная проблема заключается в том, что формат не проверяется при сохранении, в отличие от crontab -e, поэтому случайный персонаж может незаметно сломать весь cron.
Есть ли способ проверить формат / etc / crontab до / после сохранения?
Единственный надежный способ, который я нашел, - это проверить журнал.
cron
чеки /etc/crontab
каждую минуту и регистрирует сообщение о том, что он перезагрузил его или обнаружил ошибку.
Итак, после редактирования запустите это:
sleep 60; grep crontab /var/log/syslog | tail
Или, чтобы не ждать целую минуту, а только до следующей минуты + 5 секунд:
sleep $(( 60 - $(date +%S) + 5 )) && grep cron /var/log/syslog | tail
Пример вывода с ошибкой:
Jan 9 19:10:57 r530a cron[107258]: Error: bad minute; while reading /etc/crontab
Jan 9 19:10:57 r530a cron[107258]: (*system*) ERROR (Syntax error, this crontab file will be ignored)
Хороший выход:
Jan 9 19:19:01 r530a cron[107258]: (*system*) RELOAD (/etc/crontab)
Это в Debian 8. В других системах cron может регистрироваться в другом файле.
(Я думал, что смогу избежать охоты за правильным файлом журнала, используя systemd journalctl -u cron
, но это не показало мне этих записей журнала, и на самом деле, похоже, по какой-то причине перестал регистрировать события cron 2 дня назад)
Еще одно более свежее решение - скрипт Python chkcrontab
Злые классные сценарии оболочки имеет сценарий оболочки, который проверяет файлы crontab.
Вы можете получить zip-архив со скриптом Вот
Скрипт называется verifycron
Я нашел вот это крутое решение: https://crontab.guru
Он не просто проверяет crontab, он явно сообщает вам, что и когда будет запускаться crontab, и указывает, где находятся ошибки.
В Ubuntu мне кажется, что я могу просто запустить:
crontab path/to/crontab/file
ПРИМЕЧАНИЕ: это имеет побочный эффект запуска этого cronjob (спасибо @NZD)
Если файл недействителен, я выдаю ошибку, например:
"crontab":11: bad minute
errors in crontab file, can't install.