Espreite a saída 'at' antes de concluir

9

Digamos que eu execute um script com at no Linux (exemplo abaixo) que sei que vai levar várias horas, ou talvez vários dias. Estou acostumado a at enviar um e-mail com a saída do comando depois de concluído, mas e se eu quisesse ver o resultado atual antes ser concluído? Vamos supor também que eu já executei o script e esqueci de redirecionar a saída usando tail , tee ou outros métodos semelhantes e não quero parar o script. Existe alguma maneira de fazer isso?

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
    
por Drew Chapin 07.01.2017 / 15:37

2 respostas

9

Se o trabalho tiver começado e você tiver alguma forma de obter o PID desse trabalho, poderá ver onde at está salvando a saída:

$ 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

Como você pode ver, a saída é salva em um arquivo temporário, que você pode verificar agora:

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

Você precisa de sudo porque o diretório que contém não é acessível ao mundo (pelo menos no 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
    
por 07.01.2017 / 15:54
0

Outra maneira de determinar qual arquivo de spool pertence ao seu trabalho é obter o número do trabalho em atq .

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

Converta o número do trabalho em hexadecimal. por exemplo. 38 (dec) = 26 (hex).

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

Seu arquivo será denominado Letra da fila (99% do tempo, é a ) seguido por 5 dígitos do ID da tarefa hexadecimal (aprendi isso examinando o código-fonte do comando at ).

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
                                              -----

Então você pode ver o stdout

drew@sokar:~$ sudo less /var/spool/cron/atspool/a0002601856a0f
    
por 10.07.2018 / 19:22

Tags