Bagaimana cara mencetak konten di tempat kerja?

34

Saya memiliki kotak Debian dengan beberapa pekerjaan yang dijadwalkan menggunakan at. Saya tahu saya bisa daftar pekerjaan dengan waktu mereka gunakan atq, tetapi apakah ada cara untuk mencetak konten mereka, selain mengintip ke dalamnya /var/spool/cron/atjobs?

che
sumber

Jawaban:

39

at -c jobnumberakan mendaftar satu pekerjaan. Jika Anda ingin melihat semuanya, Anda dapat membuat skrip seperti

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

Mungkin ada cara yang lebih singkat untuk melakukan itu, saya baru saja mengeluarkan itu dari kepala saya :)

Janne Pikkarainen
sumber
7
at -c $(atq | cut -f 1)atau for each in $(atq | cut -f 1)akan menghindari kesalahan "Tidak dapat menemukan jobid". (Juga, Bash for ((each=1; each<=MAXJOB; each++))tidak perlu melakukannya seq. Jika Anda khawatir dengan portabilitas, maka #!/bin/sh.)
Dijeda sampai pemberitahuan lebih lanjut.
jangan lupa tua yang baik awk,atq | awk '{ system("at -c " $1) }'
norcalli
7

Dibangun berdasarkan respons sebelumnya, ini mencantumkan setiap baris pekerjaan dari atqmenampilkan nomor pekerjaan dan waktu yang dijadwalkan dan kemudian hanya perintah yang akan dijalankan, diurutkan secara kronologis (bukan nomor pekerjaan):

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

memproduksi, mis

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

Pendekatan yang jauh lebih sederhana:

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

Anda juga dapat melihat masing-masing lesssecara bergantian, yang mungkin lebih jelas:

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

Saya telah membuat perintah atqcuntuk ini ("atq with command"). Fungsi bash. Jalankan ini pada bash command line (perintah terminal). Atau letakkan di ~/.bashrcfile untuk membuatnya nanti:

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

Menguji:

atqc

Itu bekerja untuk RHEL7 dengan at -Vversi 3.1.13.

Ubuntu 16.04 dengan at -Vversi 3.1.18 memiliki format output yang sedikit berbeda at -c N, jadi pada server Ubuntu saya ini berfungsi:

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