Come verificare se il lavoro di cron funziona?

3

Uso crontab -e senza sudo per modificare i lavori cron e aggiungere la riga seguente -

20 22 23 10 * date "+%Y-%m-%d %H:%M:%S" >> ~/Documents/log.txt

quindi controllo il file di log e non contiene la data e l'ora.

Ho provato a modificare crontab come root, ma non aggiorna il file. Cosa potrebbe essere sbagliato qui? C'è un modo per vedere il log di esecuzione di cron jobs?

P.S. Aggiorna crontab creato sotto root:

0/5 * * * * /bin/date "+%Y-%m-%d %H:%M:%S" >> /tmp/log.txt
0/5 * * * * echo >> /tmp/log2.txt

log2.txt è stato creato ora.

    
posta LA_ 23.10.2016 - 21:34
fonte

1 risposta

3

Il tuo messaggio di errore cron viene inviato all'account mail dell'utente che esegue il lavoro cron .

Digitare mail nella riga di comando per visualizzare i messaggi. Per un elenco di comandi mail , consulta mail uomo .

Dovresti ricevere messaggi di errore con l'effetto di:

/bin/sh: -c: line 0: unexpected EOF while looking for matching '"'
/bin/sh: -c: line 1: syntax error: unexpected end of file

Quanto a te comando e perché non funziona, è perché il segno "%" è un carattere "newline", il che significa che dice alla shell di "passare alla riga successiva". Quindi, dopo che incontra il primo "%", passa alla riga successiva e non vede mai il resto del comando. Ciò è confermato dall '"EOF inaspettato mentre si cerca la corrispondenza" "(virgolette doppie).

La pagina man locale per crontab ( man crontab ) è abbastanza scarsa di dettagli e sto speculando che è perché cron è stato deprecato per launchd 1 . Tuttavia, la pagina di manuale di crontab da developer.apple.com lo spiega

The "sixth" field (the rest of the line) specifies the command to be run. The entire command portion of the line, up to a newline or % character, will be executed by /bin/sh or by the shell specified in the SHELL variable of the cronfile. Percent-signs (%) in the command, unless escaped with backslash (\), will be changed into newline characters, and all data after the first % will be sent to the command as standard input. The command can optionally be prefixed by "@AppleNotOnBattery" to tell cron not to run the command when functioning on battery power. For example, the "sixth" field when using this option would appear something like "@AppleNotOnBattery /usr/bin/touch /tmp/foo"


La tua correzione:

Quindi, quello che devi fare è "scappare" il carattere "%" con una barra rovesciata (\) in modo che gli dica di interpretarlo letteralmente.

Il tuo comando dovrebbe essere:

0/5 * * * * /bin/date "+\%Y-\%m-\%d \%H:\%M:\%S" >> /tmp/log.txt
 

1 Da man crontab : (nota di Darwin: sebbene cron (8) e crontab (5) siano ufficialmente supportati da Darwin, la loro funzionalità è stata incorporata in launchd (8), che fornisce un modo più flessibile di eseguire automaticamente i comandi. Per ulteriori informazioni, vedere launchctl (1).

    
risposta data 23.10.2016 - 23:59
fonte

Leggi altre domande sui tag