2016-04-06 16 views
9

Ho un cron job e il suo output è ora reindirizzato in un file. Sembra che il seguenteCome reindirizzare l'output cron job allo stdout

0 9 * * * /bin/sh /bin/cleanup.sh > /home/darkknight/cleanup.log

Nessuno può aiutarmi a rediect la sua allo standard output?

+4

Eventuali duplicati di [come reindirizzare l'output completo di uno script] (http://stackoverflow.com/questions/1887618/how-to-redirect-complete-output-of-a-script) – Bhavesh

+0

http : //unix.stackexchange.com/questions/52330/how-to-redirect-output-to-a-file-from-within-cron – Bhavesh

+0

'cron' è in esecuzione sullo sfondo della shell, quindi a quale' stdout 'vuoi reindirizzare l'output? –

risposta

1

Immettere tty su qualsiasi terminale e otterremo il file del dispositivo per quella finestra temporale specifica come /dev/pts/1. Reindirizzare il lavoro cron in questo file come cleanup.sh > /dev/pts/1

+0

Questo tty non sarà più valido (chiuso e forse riutilizzato in seguito) quando si disconnette o si esce dalla shell corrente. –

1

Eseguire cat /home/darkknight/cleanup.log quindi ottenere l'output su STDOUT. Se non è possibile vedere ciò che ci si aspetta in uscita, forse avete bisogno di modificare il cron come segue:

0 9 * * * /bin/sh /bin/cleanup.sh > /home/darkknight/cleanup.log 2>&1

per ottenere ciò che cleanup.sh scrive sul suo STDERR.

Se non si vuole perdere l'uscita di ieri, modificare come segue:

0 9 * * * /bin/sh /bin/cleanup.sh >> /home/darkknight/cleanup.log 2>&1

Oppure, semplicemente eseguire /bin/sh /bin/cleanup.sh allora si ottiene sia STDOUT e STDERR sul vostro terminale.

13

Il processo in esecuzione ha un PID e il suo fd (descrittore di file) sta mappando su /proc/<PID>/fd. E possiamo trovare il PID del processo cron in esecuzione al /var/run/crond.pid.

Per inviare cron log a stdout, è possibile scrivere il log su fd numero 1 del processo avviato da cron.

0 9 * * * /bin/sh /bin/cleanup.sh > /proc/$(cat /var/run/crond.pid)/fd/1 2>&1 
+0

Com'è utile? Sul mio sistema, ad esempio, stdout e stderr del processo '/ usr/bin/cron' sono diretti ai socket. –

+3

@KeithThompson Il mio scenario è che io uso un contenitore docker che esegue il servizio cron (usa 'cron -f' per far funzionare cron in foreground), e poiché voglio raccogliere i log per il monitoraggio e l'analisi. Secondo l'app di 12 fattori - 'Registra registri come flussi di eventi 'quindi reindirizzo cron log a stdout. – gaga5lala

+0

Funziona davvero? Sei in grado di accedere ai dati scritti su queste prese? –