Câu trả lời:
at -c jobnumber
sẽ 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ừ atq
hiể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ể less
lầ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 atqc
cho 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 ~/.bashrc
tệ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 -V
phiên bản 3.1.13.
Ubuntu 16.04 với at -V
phiê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
.)