Dai un'occhiata all'output `at` prima che sia completato


8

Diciamo che eseguo uno script con atsu Linux (esempio sotto) che so che ci vorranno diverse ore, o forse anche più giorni. Sono abituato a atinviare un'e-mail con l'output del comando una volta completato, ma se volessi dare un'occhiata all'output corrente prima che venga completato? Supponiamo anche che ho già eseguito lo script e dimenticato di reindirizzare l'output utilizzando tail, teeo altri metodi simili e non voglio smettere di script. Esiste un modo per farlo?

drew@anubis:~$ at now
warning: commands will be executed using /bin/sh
at> ./myscript.sh
at> <EOT>
job 3 at Sat Jan  7 09:31:00 2017

picco o sbirciatina? Vuoi vedere cosa sta facendo mentre lo sta facendo?
Journeyman Geek

@JourneymanGeek, Oops. Peek sarebbe quello che volevo scrivere. Voglio vedere cosa sta facendo.
Ha disegnato Chapin il

Reindirizzare l'output dello script su un file quando si pianifica il lavoro at e tail -fquel file?
Muru,

@muru, Facciamo finta di aver già eseguito lo script senza usare taile non voglio fermarlo.
Ha disegnato Chapin il

Avrei bisogno di testare, ma modificare lo script per usare tee e salvare l'output in un file, quindi adattarlo funziona?
Journeyman Geek

Risposte:


9

Se il lavoro è stato avviato e hai un modo per ottenere il PID di quel lavoro, potresti vedere dove atsta salvando l'output:

$ at now
warning: commands will be executed using /bin/sh
at> sleep 10m
at> <EOT>
job 7 at Sat Jan  7 20:18:00 2017
$ pgrep sleep
7582
$ ls -l /proc/7582/fd
total 0
lr-x------ 1 muru muru 64 Jan  7 20:19 0 -> /var/spool/cron/atjobs/a0000701795998 (deleted)
lrwx------ 1 muru muru 64 Jan  7 20:19 1 -> /var/spool/cron/atspool/a0000701795998
lrwx------ 1 muru muru 64 Jan  7 20:19 2 -> /var/spool/cron/atspool/a0000701795998

Come puoi vedere, l'output viene salvato in un file temporaneo, che ora puoi controllare:

$ sudo tail -f /var/spool/cron/atspool/a0000701795998
Subject: Output from your job        7
To: muru

È necessario sudoperché la directory contenente non è accessibile in tutto il mondo (almeno su Ubuntu 14.04):

$ sudo namei -lx /var/spool/cron/atspool/a0000701795998
f: /var/spool/cron/atspool/a0000701795998
Drwxr-xr-x root     root   /
drwxr-xr-x root     root   var
drwxr-xr-x root     root   spool
drwxr-xr-x root     root   cron
drwxrwx--T daemon   daemon atspool
-rw------- muru     muru   a0000701795998

1
Signore, siete il mio eroe! Funzionava perfettamente!
Ha disegnato Chapin il

4
Vorrei aggiungere, tuttavia, che se sai che stai eseguendo un solo atlavoro. Non hai nemmeno bisogno del PID. Puoi semplicemente eseguire sudo ls /var/spool/cron/atspoole dovrebbe, in teoria, essere l'unico file lì.
Ha disegnato Chapin il

0

Un altro modo per determinare quale file di spool appartiene al proprio lavoro è quello di ottenere il numero del lavoro atq.

drew@sokar:~$ atq
38      Tue Jul 10 12:15:00 2018 = drew

Converti il ​​numero del lavoro in esadecimale. ad es. 38 (dec) = 26 (esadecimale).

drew@sokar:~$ printf "%x\n" 38
26

Il tuo file sarà chiamato lettera di coda (il 99% delle volte, è a) seguito da un id di lavoro esadecimale a 5 cifre (l'ho imparato guardando attraverso il codice sorgente del atcomando).

drew@sokar:~$ sudo ls -l /var/spool/cron/atspool
total 55968
-rw------- 1 drew drew       49 Feb 16  2017 a0001c017a3cb2
-rw------- 1 drew drew 57297586 Feb 26  2017 a0001e017a7405
-rw------- 1 drew drew     2329 Jul 10 12:21 a0002601856a0f
                                              -----

Quindi è possibile visualizzare lo stdout

drew@sokar:~$ sudo less /var/spool/cron/atspool/a0002601856a0f
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.