Чи є спосіб перевірити формат / etc / crontab?


35

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

Єдине, що формат не перевіряється на збереження, на відміну від crontab -e - тому бродячий персонаж може спокійно зламати весь крон.

Чи є спосіб перевірити формат / etc / crontab до / після збереження?


4
Якщо ви, як я, ви приїхали сюди, шукаючи простий (не написаний сценарій ) спосіб сказати вам, чи правильно ви вступили в cron, можливо, вас зацікавить cronchecker.net - це онлайн-валідатор для записів cron з human- дружній вихід.
Метт Гібсон

Відповіді:


17

Єдиний надійний спосіб, який я знайшов - перевірити журнал.

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 дні тому)


Тестовано на FreeBSD 10.3. Працює як шарм, просто замініть шлях до журналу на / var / log / cron
Jette


11

У скриптів із крихітними оболонками є сценарій оболонки, який перевіряє файли crontab.

Ви можете отримати архів поштового індексу , що містить сценарій тут

Сценарій називається verifycron


1
Джерело також є на сайті книги: intuitive.com/wicked/showscript.cgi?053-verifycron.sh Дуже подобається ця книга.

Посилання більше не працює станом на 11 січня 2017 року
Epskampie

3

Я знайшов це класне рішення тут: https://crontab.guru

Він не просто підтверджує кронтаб, він чітко повідомляє, що і коли він буде працювати, і підкреслює, де є помилки.


0

На Ubuntu здається, що я можу просто запустити:

crontab path/to/crontab/file

ПРИМІТКА. Це побічний ефект від початку цієї роботи (спасибі @NZD)

Якщо файл недійсний, я стану помилкою, наприклад:

"crontab":11: bad minute
errors in crontab file, can't install.

1
ця команда перевіряє файл crontab, але при цьому встановлює його (якщо він не містить помилок). Це, мабуть, небажаний побічний ефект для ОП.
NZD

Дякую @NZD, я додав це до своєї відповіді, щоб переконатися, що ОП знає про це.
conradkdotcom

Команда @conradk не запускає cronjob, вона перезаписує наявний файл користувача crontab із наданим файлом.
MadHatter підтримує Моніку

Це насправді не справляється з усіма можливими проблемами із кронтабом; це спричинить деякі яскраві проблеми, але це не спричинить, наприклад: * 4/0 * * /bin/myscript.sh - 4/0недійсне. але цей метод не спійманий
JDS

@JDS Це не ступінчасте значення? Чи 0заборонене значення кроку ? unix.stackexchange.com/questions/32027/…
conradkdotcom
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.