Answers:
在先前的响应的基础上,此列表从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
我已经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 -V
3.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"';}
at -c $(atq | cut -f 1)
否则for each in $(atq | cut -f 1)
将避免出现“找不到工作ID”错误。(此外,Bashfor ((each=1; each<=MAXJOB; each++))
不需要seq
。如果您担心可移植性,则#!/bin/sh
。)