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

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

6 ответов

Решение

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 

Вероятно, есть более короткий способ сделать это, я просто высунул это из головы:)

Основываясь на предыдущих ответах, в нем перечислены строки каждой работы от 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

Гораздо более простой подход:

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

Я создал команду 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"';}

Вот альтернативный подход, похожий на другие в этой теме, но с большим использованием awk:

atq | awk '{ print "at -c " $1 }' | bash

Чтобы выполнить "пробный прогон" и посмотреть, что будет выполнено, просто удалите часть "| bash" с конца.

Я хотел, чтобы мои задания были перечислены по дате выполнения и соответствующей командной строке. Поменяйте местами##на линииget_at_lineесли вы предпочитаете вывод, разделенный пробелами, а не столбцами.

      me@PC3540:~$ which atl  
/home/me/bin/atl  
me@PC3540:~$ cat /home/me/bin/atl  
  
#!/bin/bash  
PFIX=A00000  
get_at_line () {  
for i in $(at -l | cut -f1 )  
do  
 ATLINE=$(at -l | grep ^$i)  
 ATSTATUS=$(echo $ATLINE | tr -s " " | cut -f7 -d" ")  
 ATTIME=$(echo $ATLINE | cut -f2- | cut -f1-6 -d" ")  
 ATISO=$(date -d "$ATTIME" +%Y-%m-%d' '%R)  
 ATCMD=$(at -c $i | sed -n -e '/}/,$p' | grep -v -e '}' )    
 HEX=$(printf '%x\n' $i)   
 VAL=$(printf "%X\n" $((0x$PFIX+0x$HEX)))  
 VAL=${VAL,,}  
 echo Job: $(printf "%02d\n" $i) $VAL At: $ATISO $ATSTATUS: $ATCMD  
done  
}  
if $(which at > /dev/null)  
then  
 if [ ! -z "$(at -l)" ]  
 then  
  get_at_line | sort -k5 -k6 | column -t -s" " -n  
  ##get_at_line | sort -k5 -k6  
 else  
  echo -e "\n.. no at jobs found for user $USER\n"  
 fi  
else   
 echo -e "\n.. service at not installed \n"  
fi   
Другие вопросы по тегам