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

che
fuente

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

Janne Pikkarainen
fuente
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
palilicio
fuente
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
Comodín
fuente
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"';}
Kjetil S.
fuente