Czy istnieje sposób na sprawdzenie poprawności formatu / etc / crontab?

35

Wolę trzymać zaplanowane zadania w / etc / crontab, aby na pierwszy rzut oka zobaczyć, co jest zaplanowane do uruchomienia, niezależnie od tego, jakiego użytkownika uruchamia zadanie.

Jedynym problemem jest to, że format nie jest sprawdzany przy zapisie, w przeciwieństwie do crontab -e - więc zbłąkany znak może spokojnie złamać cały cron.

Czy istnieje sposób na sprawdzenie poprawności formatu / etc / crontab przed / po zapisaniu?

Ben K.
źródło
4
Jeśli, tak jak ja, przyszedłeś tu poszukać prostego (niemożliwego do skryptu) sposobu, aby powiedzieć, czy poprawnie wpisałeś cron, możesz zainteresować się cronchecker.net - jest to internetowy walidator dla wpisów cron z ludzko- przyjazny wynik.
Matt Gibson,

Odpowiedzi:

17

Jedynym niezawodnym sposobem, jaki znalazłem, jest sprawdzenie dziennika.

cronsprawdza /etc/crontabco minutę i zapisuje komunikat wskazujący, że został ponownie załadowany lub że wykrył błąd.

Więc po edycji uruchom to:

sleep 60; grep crontab /var/log/syslog | tail

Lub, aby nie czekać pełną minutę, ale tylko do następnej minuty + 5 sekund:

sleep $(( 60 - $(date +%S) + 5 )) && grep cron /var/log/syslog | tail

Przykładowe dane wyjściowe z błędem:

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)

Dobra wydajność:

Jan  9 19:19:01 r530a cron[107258]: (*system*) RELOAD (/etc/crontab)

Tak jest w Debianie 8. W innych systemach cron może zalogować się do innego pliku.

(Myślałem, że mogę uniknąć polowania na odpowiedni plik dziennika za pomocą systemd's journalctl -u cron, ale to nie pokazało mi tych wpisów w dzienniku i faktycznie z jakiegoś powodu przestałem rejestrować zdarzenia cron)

mivk
źródło
Testowane na FreeBSD 10.3. Działa jak urok, po prostu zamień ścieżkę dziennika na / var / log / cron
Jette
14

Innym nowszym rozwiązaniem jest skrypt chkcrontab w języku Python

Dave Wongillies
źródło
Nie sprawdza jeszcze cronjobs użytkowników
userlond
3

Znalazłem to fajne rozwiązanie tutaj: https://crontab.guru

Nie tylko sprawdza poprawność pliku crontab, ale wyraźnie mówi, co i kiedy będzie uruchamiany plik crontab, i podkreśla, gdzie są błędy.

JDS
źródło
0

Na Ubuntu wydaje się, że mogę po prostu uruchomić:

crontab path/to/crontab/file

UWAGA: ma to efekt uboczny uruchomienia tego cronjob (dzięki @NZD)

Jeśli plik jest nieprawidłowy, wystąpi błąd, taki jak:

"crontab":11: bad minute
errors in crontab file, can't install.
conradkdotcom
źródło
1
to polecenie sprawdza plik crontab, ale jednocześnie go instaluje (jeśli nie zawiera błędów). Jest to prawdopodobnie niepożądany efekt uboczny PO.
NZD
Dzięki @NZD, dodałem to do mojej odpowiedzi, aby upewnić się, że OP jest tego świadomy.
conradkdotcom,
@conradk polecenie nie uruchamia cronjob, zastępuje istniejący plik crontab użytkownika dostarczonym plikiem.
MadHatter obsługuje Monikę
To nie działa w rzeczywistości na wszystkie możliwe problemy z crontabem; wyłapie niektóre rażące problemy, ale nie złapie tego, na przykład: * 4/0 * * /bin/myscript.sh - 4/0jest nieprawidłowy. ale nie jest złapany przez tę metodę
JDS
@JDS Czy to nie jest wartość kroku? Czy wartość kroku jest 0zabroniona? unix.stackexchange.com/questions/32027/…
conradkdotcom