sviluppo-web-qa.it

C'è un modo per convalidare il formato / etc / crontab?

Preferisco incollare le attività pianificate in/etc/crontab in modo da poter vedere a colpo d'occhio cosa è pianificato per l'esecuzione, indipendentemente da quale utente viene eseguita l'attività.

L'unico problema è che il formato non è validato su save, a differenza di crontab -e - quindi un personaggio randagio può tranquillamente rompere l'intero cron.

C'è un modo per convalidare il formato/etc/crontab prima/dopo il salvataggio?

37
Ben K.

L'unico modo affidabile che ho trovato è controllare il registro.

cron controlla /etc/crontab ogni minuto e registra un messaggio che indica che lo ha ricaricato o che ha riscontrato un errore.

Quindi dopo la modifica, esegui questo:

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

Oppure, per non attendere un minuto intero, ma solo fino al minuto successivo + 5 secondi:

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

Esempio di output con un errore:

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)

Buona uscita:

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

È su Debian 8. Su altri sistemi, cron potrebbe accedere a un altro file.

(Ho pensato che avrei potuto evitare di cercare il file di registro corretto usando systemd's journalctl -u cron, ma questo non mi ha mostrato queste voci di registro e in realtà sembra aver smesso di registrare eventi cron 2 giorni fa per qualche motivo)

20
mivk

Un'altra soluzione più recente è python script chkcrontab

14
Dave Wongillies

Wicked cool Script script ha uno script Shell che convalida i file crontab.

È possibile ottenere l'archivio Zip contenente lo script qui

Lo script si chiama confirmcron

11
Ludwig Weinzierl

Ho trovato questa fantastica soluzione qui: https://crontab.gur

Non solo convalida il crontab, ti dice esplicitamente cosa e quando verrà eseguito il crontab e evidenzia dove sono gli errori.

3
JDS

Su Ubuntu, sembra che io possa semplicemente eseguire:

crontab path/to/crontab/file

NOTA: questo ha l'effetto collaterale di iniziare questo cronjob (grazie @NZD)

Se il file non è valido, verrà visualizzato un errore, ad esempio:

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