Назад | Перейти на главную страницу

Есть ли способ проверить формат / etc / crontab?

Я предпочитаю помещать запланированные задачи в / 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.