如何打印at作业的内容?


34

我有一个Debian盒子,上面安排了一些工作at。我知道我可以使用列出工作的时间atq,但是除了窥视之外,还有什么方法可以打印出它们的内容/var/spool/cron/atjobs

Answers:


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)将避免出现“找不到工作ID”错误。(此外,Bash for ((each=1; each<=MAXJOB; each++))不需要seq。如果您担心可移植性,则#!/bin/sh。)
已暂停,直到另行通知。

别忘了好年纪awkatq | 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功能。在bash命令行(终端命令)上运行此命令。或将其放在~/.bashrc文件中以供以后使用:

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

测试一下:

atqc

适用于at -V3.1.13版的RHEL7 。

at -V版本3.1.18的Ubuntu 16.04在中的输出格式略有不同at -c N,因此在我的Ubuntu服务器上,该格式有效:

atqc(){ atq|perl -nE'($q,$j)=/((\d+).*)/;qx(at -c $j)=~/\n}\n(.*?)\s*$/s;say"$q: $1"';}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.