¿Cómo imprimo el contenido de at jobs?


34

Tengo un cuadro de Debian con algunos trabajos programados usando at. Sé que puedo enumerar los trabajos con su tiempo atq, pero ¿hay alguna forma de imprimir su contenido, además de mirar /var/spool/cron/atjobs?

Respuestas:


39

at -c jobnumberenumerará un solo trabajo. Si desea verlos todos, puede crear un script como

#!/bin/bash
MAXJOB=$(atq | head -n1 | awk '{ print $1; }')
for each in $(seq 1 $MAXJOB); do echo "JOB $each"; at -c $each; done 

Probablemente hay una forma más corta de hacerlo, me lo saqué de la cabeza :)


77
at -c $(atq | cut -f 1)o for each in $(atq | cut -f 1)evitará los errores "No se pueden encontrar los trabajos". (Además, Bash no tiene for ((each=1; each<=MAXJOB; each++))necesidad de hacerlo seq. Si le preocupa la portabilidad, entonces #!/bin/sh.)
Pausó hasta nuevo aviso.

no te olvides de lo bueno awk,atq | awk '{ system("at -c " $1) }'
norcalli

7

Sobre la base de las respuestas anteriores, esto enumera la línea de cada trabajo para atqmostrar el número de trabajo y la hora programada y luego solo el comando que se ejecutará, ordenado cronológicamente (en lugar del número de trabajo):

for j in $(atq | sort -k6,6 -k3,3M -k4,4 -k5,5 |cut -f 1); do atq |grep -P "^$j\t" ;at -c "$j" | tail -n 2; done

produciendo, por ejemplo

48  Fri Mar 10 15:13:00 2017 a root
/usr/local/bin/a-command

47  Fri Mar 10 15:14:00 2017 a root
/usr/local/bin/another-command

4

Un enfoque mucho más simple:

for j in $(atq | cut -f 1); do at -c "$j"; done

También puede mirar a cada uno lesspor turno, lo que podría ser más claro:

for j in $(atq | cut -f 1); do at -c "$j" | less; done

2

He creado un comando atqcpara esto ("atq con comando"). Una función bash. Ejecute esto en la línea de comando bash (comando de terminal). O póngalo en el ~/.bashrcarchivo para que esté disponible para más tarde:

atqc () { atq|perl -ne'($q,$j)=/((\d+).*)/;qx(at -c $j)=~/(marcinDEL\w+).\n(.*?)\n\1/s;print"$q $2"'; }

Pruébalo:

atqc

Eso funciona para RHEL7 con la at -Vversión 3.1.13.

Ubuntu 16.04 con la at -Vversión 3.1.18 tiene un formato de salida ligeramente diferente at -c N, por lo que en mi servidor Ubuntu esto funciona:

atqc(){ atq|perl -nE'($q,$j)=/((\d+).*)/;qx(at -c $j)=~/\n}\n(.*?)\s*$/s;say"$q: $1"';}
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.