从 "at" 个作业的非交互式队列中获取作业编号
Get job number from non-interactive queuing of "at" job
背景
我正在编写一个脚本,偶尔通过 at
命令对作业进行排队。为了以自动化、非交互式的方式完成此操作,我 echo
将要对文件执行的命令,即:
echo "ls -la" > cmd.txt
然后我将命令安排到 运行 2 分钟后通过:
at -f cmd.txt now + 2 min
问题
我想以一种自动化的、非交互式的、确定性的方式;确定与我的脚本刚刚排队的任务关联的作业编号。不幸的是,return 代码(即 echo $?
)中似乎没有提供任何内容,也没有我可以发出的 CLI 命令为我提供此信息。我总是可以抓取 stdout
数据,即:
$> A=$(at -f cmd.txt now + 1 min)
warning: commands will be executed using /bin/sh
job 6
at Fri Mar 8 07:18:00 2019
但是,如果可能的话,我想使用比解析 stdout
数据更多 canonical/direct 的东西,因为我想避免 stdout
因平台而异的情况到下一个(即 Linux、BSD、OSX)。
问题
如何直接获取我的脚本刚排队的 at
作业的作业编号(在脚本中)?
编辑
我必须考虑同时使用 at
命令的其他进程。
您可以使用 atq
查看每次提交后的作业队列,并从最后一行的第一列获取任何新提交作业的作业 ID。
在调度前记录at
队列状态,调度你的工作,然后找到添加:
$ date
Fri Mar 8 10:33:34 EST 2019
$ atq
3 2019-03-08 10:34 a bishop
$ atq > atq.1
$ echo "ls -l" > cmd.txt
$ at -f cmd.txt now + 2 min
job 4 at 2019-03-08 10:36
You have new mail in /var/spool/mail/bishop
$ atq > atq.2
$ comm atq.1 atq.2
3 2019-03-08 10:34 a bishop
4 2019-03-08 10:36 a bishop
$ comm -23 atq.1 atq.2 | awk '{print }' # completed jobs
3
$ comm -13 atq.1 atq.2 | awk '{print }' # added jobs
4
如前所述,这不受您手下完成的工作的影响。当然,如果同时在单独的进程中添加作业,并且您想排除这些作业,则需要使用不同的解决方案(可能通过 grepping 查找提交作业的用户,或者让不同的进程提交到单独的 at -q
队列中).
背景
我正在编写一个脚本,偶尔通过 at
命令对作业进行排队。为了以自动化、非交互式的方式完成此操作,我 echo
将要对文件执行的命令,即:
echo "ls -la" > cmd.txt
然后我将命令安排到 运行 2 分钟后通过:
at -f cmd.txt now + 2 min
问题
我想以一种自动化的、非交互式的、确定性的方式;确定与我的脚本刚刚排队的任务关联的作业编号。不幸的是,return 代码(即 echo $?
)中似乎没有提供任何内容,也没有我可以发出的 CLI 命令为我提供此信息。我总是可以抓取 stdout
数据,即:
$> A=$(at -f cmd.txt now + 1 min)
warning: commands will be executed using /bin/sh
job 6
at Fri Mar 8 07:18:00 2019
但是,如果可能的话,我想使用比解析 stdout
数据更多 canonical/direct 的东西,因为我想避免 stdout
因平台而异的情况到下一个(即 Linux、BSD、OSX)。
问题
如何直接获取我的脚本刚排队的 at
作业的作业编号(在脚本中)?
编辑
我必须考虑同时使用 at
命令的其他进程。
您可以使用 atq
查看每次提交后的作业队列,并从最后一行的第一列获取任何新提交作业的作业 ID。
在调度前记录at
队列状态,调度你的工作,然后找到添加:
$ date
Fri Mar 8 10:33:34 EST 2019
$ atq
3 2019-03-08 10:34 a bishop
$ atq > atq.1
$ echo "ls -l" > cmd.txt
$ at -f cmd.txt now + 2 min
job 4 at 2019-03-08 10:36
You have new mail in /var/spool/mail/bishop
$ atq > atq.2
$ comm atq.1 atq.2
3 2019-03-08 10:34 a bishop
4 2019-03-08 10:36 a bishop
$ comm -23 atq.1 atq.2 | awk '{print }' # completed jobs
3
$ comm -13 atq.1 atq.2 | awk '{print }' # added jobs
4
如前所述,这不受您手下完成的工作的影响。当然,如果同时在单独的进程中添加作业,并且您想排除这些作业,则需要使用不同的解决方案(可能通过 grepping 查找提交作业的用户,或者让不同的进程提交到单独的 at -q
队列中).