cmd.txt 然后我-6ren">
gpt4 book ai didi

linux - 从 "at"作业的非交互式队列中获取作业编号

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:32:49 25 4
gpt4 key购买 nike


背景

我正在编写一个脚本,偶尔通过 at 命令对作业进行排队。为了以自动化、非交互式的方式完成此操作,我将要执行的命令echo 到一个文件,即:

echo "ls -la" > cmd.txt

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

at -f cmd.txt now + 2 min

问题

我想以一种自动化的、非交互式的、确定性的方式;确定与我的脚本刚刚排队的任务关联的作业编号。不幸的是,返回代码中似乎没有提供任何内容(即 echo $?),也没有我可以发出的 CLI 命令为我提供了这个。我总是可以抓取 stdout 数据,即:

$> A=$(at -f cmd.txt now + 1 min)
警告:命令将使用/bin/sh 执行
作业 6 2019 年 3 月 8 日星期五 07:18:00

但是,如果可能的话,我想使用比解析 stdout 数据更规范/直接的东西,因为我想避免 stdout 不同于一个平台到下一个平台(即 Linux、BSD、OSX)。


问题

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


编辑

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

最佳答案

在调度之前记录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 $1}' # completed jobs
3
$ comm -13 atq.1 atq.2 | awk '{print $1}' # added jobs
4

如前所述,这不受在您手下完成的作业的影响。当然,如果同时在不同的进程中添加作业,并且您想排除这些作业,则需要使用不同的解决方案(可能通过 grepping 查找提交作业的用户,或者让不同的进程提交到单独的 at -q 队列)。

关于linux - 从 "at"作业的非交互式队列中获取作业编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55066250/

25 4 0
文章推荐: c++ - 对`i2c_smbus_read_word_data(int, unsigned char) 的 undefined reference
文章推荐: android - ColorDict 和 DictData/Stardict 开发
文章推荐: c++ - 将 unique_ptr 作为 unique_ptr 返回