Jak wydrukować zawartość w zadaniach?

34

Mam pudełko Debiana z niektórymi zadaniami zaplanowanymi do użycia at. Wiem, że mogę wymienić zadania według czasu ich użycia atq, ale czy jest jakiś sposób na wydrukowanie ich zawartości, oprócz zaglądania do /var/spool/cron/atjobs?

che
źródło

Odpowiedzi:

39

at -c jobnumberwyświetli listę pojedynczego zadania. Jeśli chcesz je wszystkie zobaczyć, możesz utworzyć skrypt podobny do

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

Prawdopodobnie jest na to krótszy sposób, po prostu wyskoczyłem z głowy :)

Janne Pikkarainen
źródło
7
at -c $(atq | cut -f 1)lub for each in $(atq | cut -f 1)pozwoli uniknąć błędów „Nie można znaleźć Jobid”. (Poza tym Bash nie ma for ((each=1; each<=MAXJOB; each++))takiej potrzeby seq. Jeśli więc chodzi o przenośność, to #!/bin/sh.)
Wstrzymano do odwołania.
nie zapomnij starego awk, dobrego ,atq | awk '{ system("at -c " $1) }'
norcalli
7

Opierając się na poprzednich odpowiedziach, wyświetla listę linii każdego zadania od atqpokazania numeru zadania i zaplanowanego czasu, a następnie tylko polecenia do uruchomienia, posortowane chronologicznie (zamiast numeru zadania):

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

produkujący np

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
źródło
4

Znacznie prostsze podejście:

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

Możesz również spojrzeć na każdą z nich lesspo kolei, co może być jaśniejsze:

for j in $(atq | cut -f 1); do at -c "$j" | less; done
Dzika karta
źródło
2

Stworzyłem atqcdo tego polecenie („atq with command”). Funkcja bash. Uruchom to w wierszu poleceń bash (polecenie terminalu). Lub umieść go w ~/.bashrcpliku, aby udostępnić go później:

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

Sprawdź to:

atqc

Działa to dla RHEL7 z at -Vwersją 3.1.13.

Ubuntu 16.04 z at -Vwersją 3.1.18 ma nieco inny format wyjściowy at -c N, więc na moim serwerze Ubuntu działa to:

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