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


35

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?


4
Se, come me, sei venuto qui alla ricerca di un modo semplice (non utilizzabile da script) per dirti se hai inserito correttamente la voce cron, potresti essere interessato a cronchecker.net - è un validatore online per voci cron con human- uscita amichevole.
Matt Gibson,

Risposte:


18

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

croncontrolla /etc/crontabogni 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 giusto 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)


Testato su FreeBSD 10.3. Funziona come un incantesimo, basta sostituire il percorso del registro con / var / log / cron
Jette il



3

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

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


0

Su Ubuntu, sembra che io possa semplicemente eseguire:

crontab path/to/crontab/file

NOTA: questo ha l'effetto collaterale di avviare 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.

1
questo comando controlla il file crontab, ma allo stesso tempo lo installa (se non contiene errori). Questo è probabilmente un effetto collaterale indesiderato per l'OP.
NZD

Grazie @NZD, l'ho aggiunto alla mia risposta per assicurarmi che l'OP ne sia consapevole.
conradkdotcom,

@conradk il comando non avvia il cronjob, sovrascrive il file crontab esistente dell'utente con il file fornito.
MadHatter supporta Monica il

Questo in realtà non funziona per tutti i possibili problemi con il crontab; rileverà alcuni problemi evidenti, ma non rileva questo, ad esempio: * 4/0 * * /bin/myscript.sh - 4/0non è valido. ma non viene catturato da questo metodo
JDS

@JDS Non è un valore di passaggio? È 0vietato un valore di passaggio ? unix.stackexchange.com/questions/32027/…
conradkdotcom
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.