Mire la salida `at` antes de que se complete


8

Digamos que ejecuto un script con atLinux (ejemplo a continuación) que sé que tomará varias horas, o tal vez incluso varios días. Estoy acostumbrado a atenviar un correo electrónico con la salida del comando una vez que se completa, pero ¿y si quisiera echar un vistazo a la salida actual antes de que se complete? Supongamos también que ya he encontrado el guión y se olvidó de redirigir la salida usando tail, teeu otros métodos similares y no quiero detener el script. ¿Hay alguna forma de hacer esto?

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

pico o vistazo? ¿Quieres ver qué hace mientras lo hace?
— Journeyman Geek

@JourneymanGeek, ¡Vaya! Peek sería lo que quería escribir. Quiero ver qué está haciendo.
— Drew Chapin

¿Redirige la salida del script a un archivo cuando programa el trabajo y tail -fese archivo?
— muru

@muru, imaginemos que ya ejecuté el script sin usarlo taily no quiero detenerlo.
— Drew Chapin

Necesitaría probar, pero ¿modificaría el script para usar tee, y guardaría la salida en un archivo, y luego seguirlo?
— Journeyman Geek

Respuestas:


9

Si el trabajo ha comenzado y tiene alguna forma de obtener el PID de ese trabajo, podría ver dónde atestá guardando la salida:

$ 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 puede ver, la salida se guarda en un archivo temporal, que ahora puede verificar:

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

Necesita sudoporque el directorio que contiene no es accesible al mundo (al menos en 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
¡Usted señor, es mi héroe! Eso funcionó perfectamente!
— Drew Chapin

44
Sin embargo, me gustaría agregar que si sabes que solo estás ejecutando un attrabajo. Ni siquiera necesitas el PID. Simplemente puede ejecutar sudo ls /var/spool/cron/atspooly debería, en teoría, ser el único archivo allí.
— Drew Chapin

0

Otra forma de determinar qué archivo de spool pertenece a su trabajo es obtener el número de trabajo atq.

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

Convierta el número de trabajo a hexadecimal. por ejemplo, 38 (dec) = 26 (hex).

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

Su archivo se denominará letra de cola (el 99% del tiempo, es a) seguido de una identificación de trabajo hexadecimal de 5 dígitos (lo aprendí mirando el código fuente 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
                                              -----

Entonces puedes ver el stdout

drew@sokar:~$ sudo less /var/spool/cron/atspool/a0002601856a0f
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.