Come stampare i contenuti di at jobs?


34

Ho una scatola Debian con alcuni lavori programmati usando at. So di poter elencare i lavori con i loro tempi usando atq, ma c'è un modo per stampare i loro contenuti, oltre a sbirciare in /var/spool/cron/atjobs?

Risposte:


39

at -c jobnumberelencherà un singolo lavoro. Se vuoi vederli tutti, potresti creare uno script simile

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

Probabilmente c'è un modo più breve per farlo, me ne sono appena uscito dalla testa :)


7
at -c $(atq | cut -f 1)o for each in $(atq | cut -f 1)eviterà errori "Impossibile trovare jobid". (Inoltre, Bash for ((each=1; each<=MAXJOB; each++))non ne ha bisogno seq. Se ti preoccupi della portabilità, allora #!/bin/sh.)
Messo in pausa fino a nuovo avviso.

non dimenticare il buon vecchio awk,atq | awk '{ system("at -c " $1) }'
norcalli il

7

Sulla base delle risposte precedenti, questo elenca ogni riga del atqlavoro mostrando il numero del lavoro e l'orario programmato e quindi solo il comando da eseguire, ordinato cronologicamente (piuttosto che il numero del lavoro):

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

produzione, ad es

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 approccio molto più semplice:

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

Puoi anche guardare ciascuno lessa turno, il che potrebbe essere più chiaro:

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

2

Ho creato un comando atqcper questo ("atq with command"). Una funzione bash. Eseguilo dalla riga di comando bash (comando terminale). Oppure inseriscilo nel ~/.bashrcfile per renderlo disponibile per dopo:

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

Provalo:

atqc

Funziona con RHEL7 con la at -Vversione 3.1.13.

Ubuntu 16.04 con la at -Vversione 3.1.18 ha un formato di output leggermente diverso in at -c N, quindi sul mio server Ubuntu funziona:

atqc(){ atq|perl -nE'($q,$j)=/((\d+).*)/;qx(at -c $j)=~/\n}\n(.*?)\s*$/s;say"$q: $1"';}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.