Wie drucke ich Inhalte von at jobs?

34

Ich habe eine Debian-Box, in der einige Jobs mit eingeplant sind at. Ich weiß, dass ich die Jobs anhand ihrer Zeiten auflisten kann atq, aber gibt es eine Möglichkeit, ihre Inhalte auszudrucken, abgesehen vom Einsehen in /var/spool/cron/atjobs?

che
quelle

Antworten:

39

at -c jobnumberlistet einen einzelnen Job auf. Wenn Sie alle anzeigen möchten, erstellen Sie möglicherweise ein Skript wie

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

Wahrscheinlich gibt es einen kürzeren Weg, das habe ich gerade aus meinem Kopf geholt :)

Janne Pikkarainen
quelle
7
at -c $(atq | cut -f 1)oder for each in $(atq | cut -f 1)vermeidet "Kann jobid nicht finden" -Fehler. (Auch Bash hat for ((each=1; each<=MAXJOB; each++))so keine Notwendigkeit seq. Wenn Sie mit der Portabilität befasst sind, dann #!/bin/sh.)
Pausiert bis auf weiteres.
vergiss nicht das gute alte awk,atq | awk '{ system("at -c " $1) }'
norcalli
7

Aufbauend auf früheren Antworten werden in dieser Liste für jeden Auftrag atqdie Auftragsnummer und die geplante Zeit sowie nur der auszuführende Befehl aufgelistet, und zwar chronologisch sortiert (anstelle der Auftragsnummer):

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

Produzieren, z

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
quelle
4

Ein viel einfacherer Ansatz:

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

Sie können sich auch nacheinander die einzelnen lessElemente ansehen , was möglicherweise klarer ist:

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

Ich habe dafür einen Befehl erstellt atqc("atq with command"). Eine Bash-Funktion. Führen Sie dies in der Bash-Befehlszeile aus (Terminal-Befehl). Oder legen Sie es in die ~/.bashrcDatei, um es später zur Verfügung zu stellen:

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

Probier es aus:

atqc

Das funktioniert für RHEL7 mit at -VVersion 3.1.13.

Ubuntu 16.04 mit at -VVersion 3.1.18 hat ein etwas anderes Ausgabeformat. at -c NAuf meinem Ubuntu-Server funktioniert das folgendermaßen:

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