Câu trả lời:
at -c jobnumbersẽ liệt kê một công việc duy nhất. Nếu bạn muốn xem tất cả chúng, bạn có thể tạo một tập lệnh như
#!/bin/bash
MAXJOB=$(atq | head -n1 | awk '{ print $1; }')
for each in $(seq 1 $MAXJOB); do echo "JOB $each"; at -c $each; done
Có lẽ có một cách ngắn hơn để làm điều đó, tôi chỉ cần bật nó ra khỏi đầu :)
awk,atq | awk '{ system("at -c " $1) }'
Dựa trên các phản hồi trước đó, danh sách này liệt kê từng dòng công việc từ atqhiển thị số công việc và thời gian đã lên lịch và sau đó chỉ là lệnh sẽ được chạy, được sắp xếp theo thứ tự thời gian (thay vì số công việc):
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
sản xuất, vd
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
Một cách tiếp cận đơn giản hơn nhiều:
for j in $(atq | cut -f 1); do at -c "$j"; done
Bạn cũng có thể lesslần lượt nhìn vào từng cái một , có thể rõ ràng hơn:
for j in $(atq | cut -f 1); do at -c "$j" | less; done
Tôi đã tạo lệnh atqccho việc này ("atq với lệnh"). Một hàm bash. Chạy cái này trên dòng lệnh bash (lệnh terminal). Hoặc đặt nó trong ~/.bashrctệp để làm cho nó có sẵn cho sau này:
atqc () { atq|perl -ne'($q,$j)=/((\d+).*)/;qx(at -c $j)=~/(marcinDEL\w+).\n(.*?)\n\1/s;print"$q $2"'; }
Kiểm tra nó:
atqc
Điều đó làm việc cho RHEL7 với at -Vphiên bản 3.1.13.
Ubuntu 16.04 với at -Vphiên bản 3.1.18 có định dạng đầu ra hơi khác at -c N, vì vậy trên máy chủ Ubuntu của tôi, nó hoạt động:
atqc(){ atq|perl -nE'($q,$j)=/((\d+).*)/;qx(at -c $j)=~/\n}\n(.*?)\s*$/s;say"$q: $1"';}
at -c $(atq | cut -f 1)hoặcfor each in $(atq | cut -f 1)sẽ tránh các lỗi "Không thể tìm thấy việc làm". (Ngoài ra, Bashfor ((each=1; each<=MAXJOB; each++))không cần thiếtseq. Nếu bạn quan tâm đến tính di động, thì#!/bin/sh.)