Làm thế nào để tôi in nội dung tại các công việc?


34

Tôi có một hộp Debian với một số công việc được lên lịch sử dụng at. Tôi biết tôi có thể liệt kê các công việc với thời gian họ sử dụng atq, nhưng có cách nào để in ra nội dung của họ, ngoài việc nhìn trộm vào /var/spool/cron/atjobskhông?

Câu trả lời:


39

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 :)


7
at -c $(atq | cut -f 1)hoặc for 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, Bash for ((each=1; each<=MAXJOB; each++))không cần thiết seq. Nếu bạn quan tâm đến tính di động, thì #!/bin/sh.)
Tạm dừng cho đến khi có thông báo mới.

đừng quên chuyện cũ awk,atq | awk '{ system("at -c " $1) }'
norcalli

7

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

4

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

2

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"';}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.