Как распечатать содержимое на рабочих местах?

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) }'
Норкалли
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
palilicium
источник
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
Wildcard
источник
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"';}
Кжетил С.
источник