首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从"at“作业的非交互式队列中获取作业号。

从"at“作业的非交互式队列中获取作业号。
EN

Stack Overflow用户
提问于 2019-03-08 15:24:39
回答 2查看 151关注 0票数 1

背景

我正在编写一个脚本,它偶尔会通过at命令对作业进行排队。为了以一种自动化的、非交互式的方式实现这一点,我将执行的命令echo到一个文件中,即:

代码语言:javascript
运行
复制
echo "ls -la" > cmd.txt

然后,我将命令安排在2分钟后通过以下方式运行:

代码语言:javascript
运行
复制
at -f cmd.txt now + 2 min

问题

我想以一种自动化的、非交互式的、确定性的方式来确定与我的脚本刚刚排队的任务相关的作业号。不幸的是,在返回代码(即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数据更规范/直接的方法,因为我希望避免stdout在不同平台(即Linux、BSD、OSX)之间发生变化的情况。

问题

如何才能直接为我的脚本排队的at作业获取作业号(在脚本中)?

编辑

我必须同时考虑使用at命令的其他进程。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-08 15:36:20

在调度之前记录at队列状态,安排作业,然后查找添加的内容:

代码语言:javascript
运行
复制
$ 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 $1}' # completed jobs
3
$ comm -13 atq.1 atq.2 | awk '{print $1}' # added jobs
4

正如所展示的,这是不可能完成的工作在你的领导下。当然,如果作业同时添加到单独的进程中,并且您想要排除这些任务,那么就需要一个不同的解决方案(可能是通过为提交作业的用户打招呼,或者让不同的进程提交到单独的at -q队列中)。

票数 1
EN

Stack Overflow用户

发布于 2019-03-08 15:33:42

您可以使用atq查看每个提交后的作业队列,并从最后一行的第一列中获取任何新提交的作业的作业ID。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55066250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档