Я предпочитаю помещать запланированные задачи в/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 может войти в другой файл.
(Я думал, что смогу избежать поиска правильного файла журнала, используя системный journalctl -u cron
, но это не показывало мне эти записи в журнале, и фактически, кажется, прекратило регистрировать события cron 2 дня назад по какой-то причине)
Другое более свежее решение - это python script chkcrontab
Wicked крутые скрипты Shell имеет скрипт Shell, который проверяет файлы crontab.
Вы можете получить Zip-архив, содержащий скрипт здесь
Сценарий называется verifycron
Я нашел это классное решение здесь: https://crontab.gur
Он не просто проверяет crontab, он говорит вам явно, что и когда будет запущен crontab, и подскажет, где находятся ошибки.
В Ubuntu кажется, что я могу просто запустить:
crontab path/to/crontab/file
ПРИМЕЧАНИЕ: это побочный эффект запуска этого cronjob (спасибо @NZD)
Если файл недействителен, я выдам ошибку, например:
"crontab":11: bad minute
errors in crontab file, can't install.