Як надрукувати вміст на робочих місцях?


34

У мене є поле Debian з деякими завданнями, запланованими з використанням at. Я знаю, що я можу перерахувати завдання за часом, використовуючи atq, але чи є якийсь спосіб роздрукувати їхній вміст, окрім зазирнути /var/spool/cron/atjobs?

Відповіді:


39

at -c jobnumberперерахує одну роботу. Якщо ви хочете переглянути їх усі, ви можете створити такий сценарій

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

Можливо, є коротший спосіб зробити це, я просто вискочив це з голови :)


7
at -c $(atq | cut -f 1)або for each in $(atq | cut -f 1)уникне помилок "Неможливо знайти роботу". (Крім того, Bash for ((each=1; each<=MAXJOB; each++))не потребує цього seq. Якщо ви переймаєтесь портативністю, тоді #!/bin/sh.)
Призупинено до подальшого повідомлення.

не забувайте доброго старого awk,atq | awk '{ system("at -c " $1) }'
norcalli

7

Спираючись на попередні відповіді, у цьому списку відображається кожен рядок atqзавдання, який відображає номер завдання та запланований час, а потім лише команду, яку потрібно виконати, відсортовану хронологічно (а не номер завдання):

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

виробляючи, напр

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

Набагато простіший підхід:

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

Ви також можете по черзі переглядати кожного less, що може бути зрозумілішим:

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

2

Я створив atqcдля цього команду ("atq з командою"). Баш-функція. Запустіть це в командному рядку bash (команда терміналу). Або помістіть його у ~/.bashrcфайл, щоб він став доступним для подальшого:

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

Перевірте:

atqc

Це працює для RHEL7 з at -Vверсією 3.1.13.

Ubuntu 16.04 з at -Vверсією 3.1.18 має дещо інший формат виводу at -c N, тому на моєму сервері Ubuntu це працює:

atqc(){ atq|perl -nE'($q,$j)=/((\d+).*)/;qx(at -c $j)=~/\n}\n(.*?)\s*$/s;say"$q: $1"';}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.