Como imprimo o conteúdo de em trabalhos?

34

Eu tenho uma caixa Debian com alguns trabalhos agendados usando at. Eu sei que posso listar os trabalhos com o tempo deles usando atq, mas existe alguma maneira de imprimir o conteúdo deles, além de espiar /var/spool/cron/atjobs?

che
fonte

Respostas:

39

at -c jobnumberlistará um único trabalho. Se você quiser ver todos eles, poderá criar um 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 

Provavelmente existe uma maneira mais curta de fazer isso, eu tirei isso da minha cabeça :)

Janne Pikkarainen
fonte
7
at -c $(atq | cut -f 1)ou for each in $(atq | cut -f 1)evitará erros "Não foi possível encontrar o jobid". (Além disso, o Bash for ((each=1; each<=MAXJOB; each++))não precisa seq. Se você está preocupado com a portabilidade, então #!/bin/sh.)
Pausado até novo aviso.
não esqueça bom velho awk,atq | awk '{ system("at -c " $1) }'
norcalli 21/04
7

Com base nas respostas anteriores, isso lista a linha de cada trabalho, atqmostrando o número do trabalho e o horário agendado e, em seguida, apenas o comando a ser executado, classificado cronologicamente (em vez do número do trabalho):

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

produzindo, por exemplo

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
palilicium
fonte
4

Uma abordagem muito mais simples:

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

Você também pode olhar para cada um deles less, o que pode ser mais claro:

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

Eu criei o comando atqcpara isso ("atq with command"). Uma função bash. Execute isso na linha de comando do bash (comando do terminal). Ou coloque-o no ~/.bashrcarquivo para disponibilizá-lo para mais tarde:

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

Teste-o:

atqc

Isso funciona para o RHEL7 com a at -Vversão 3.1.13 .

O Ubuntu 16.04 com at -Vversão 3.1.18 possui um formato de saída ligeiramente diferente at -c N, portanto, no meu servidor Ubuntu, isso funciona:

atqc(){ atq|perl -nE'($q,$j)=/((\d+).*)/;qx(at -c $j)=~/\n}\n(.*?)\s*$/s;say"$q: $1"';}
Kjetil S.
fonte