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

35

Я предпочитаю помещать запланированные задачи в / etc / crontab, чтобы сразу увидеть, что запланировано запустить, независимо от того, от какого пользователя запускается задача.

Единственный недостаток в том, что формат не проверяется при сохранении, в отличие от crontab -e - поэтому случайный символ может спокойно разбить весь cron.

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

Бен К.
источник
4
Если, как и я, вы пришли сюда в поисках простого (не требующего написания сценариев) способа сообщить вам, правильно ли вы ввели запись в cron, возможно, вас заинтересует cronchecker.net - это онлайн-валидатор для записей в cron с человеком- дружественный выход.
Мэтт Гибсон

Ответы:

18

Единственный надежный способ, который я нашел, это проверить журнал.

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 дня назад по какой-то причине)

mivk
источник
Протестировано на FreeBSD 10.3. Работает как шарм, просто замените путь журнала на / var / log / cron
Jette
14

Другое более свежее решение - скрипт на python chkcrontab.

Дейв Вонгиллис
источник
Это еще не проверяет cronjobs пользователей
userlond
11

Wicked крутые сценарии оболочки имеет сценарий оболочки, который проверяет файлы crontab.

Вы можете получить zip-архив, содержащий скрипт здесь

Скрипт называется verifycron

Людвиг Вайнцерль
источник
1
Источник также есть на сайте для книги: intuitive.com/wicked/showscript.cgi?053-verifycron.sh Очень нравится эта книга.
Ссылка больше не работает с 11
января
3

Я нашел это крутое решение здесь: https://crontab.guru

Он не просто проверяет crontab, он прямо говорит вам, что и когда будет запускать crontab, и подскажет, где находятся ошибки.

JDS
источник
0

В Ubuntu кажется, что я могу просто запустить:

crontab path/to/crontab/file

ПРИМЕЧАНИЕ: это побочный эффект запуска этого cronjob (спасибо @NZD)

Если файл недействителен, я выдам ошибку, например:

"crontab":11: bad minute
errors in crontab file, can't install.
conradkdotcom
источник
1
эта команда проверяет файл crontab, но в то же время устанавливает его (если он не содержит ошибок). Это, вероятно, нежелательный побочный эффект для ОП.
NZD
Спасибо @NZD, я добавил это в свой ответ, чтобы убедиться, что ОП знает об этом.
conradkdotcom
Команда @conradk не запускает cronjob, она перезаписывает существующий файл crontab пользователя предоставленным файлом.
MadHatter поддерживает Монику
На самом деле это не работает для всех возможных проблем с crontab; он обнаружит некоторые явные проблемы, но не уловит это, например: * 4/0 * * /bin/myscript.sh - 4/0неверно. но не пойман этим методом
JDS
@JDS Разве это не шаг? Является ли значение шага 0запрещенным? unix.stackexchange.com/questions/32027/…
conradkdotcom