首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux "At“作业立即执行

问Linux "At“作业立即执行
EN

Unix & Linux用户
提问于 2019-02-21 18:01:37
回答 1查看 368关注 0票数 0

我有一个PHP应用程序,它使用exec()函数对Linux "at“作业进行调度。计划的任务是另一个PHP脚本。不知怎么的,在某些情况下,我怀疑是与同时调度同一个任务有关的,一个被排定在未来的作业会被立即执行。例如,昨天我正在测试这个功能和一个"at“作业提前执行。

我将作业的输出重定向到/var/log/中的一个名为at_job.log的文件,尽管它是有限的。作业于昨天(2月20日)(2月20日)下午21:17(9:17)执行。以下是日志文件内容,截至2月21日17:57(5:57pm):

代码语言:javascript
复制
..
job 72 at Thu Feb 21 23:07:00 2019
job 73 at Thu Feb 21 23:17:00 2019

以下是同一时间的"at“作业队列(2月21日,17:57 UTC):

代码语言:javascript
复制
# atq
73      Thu Feb 21 23:17:00 2019 a staging

想知道这是怎么可能的,以及我做错了什么导致它。从那时起,我就投入了安全措施来避免同时安排工作,但我不能百分之百肯定这就是这里发生的事情。

更新:

下面是我运行的命令(稍微修改一下以隐藏一些细节):

代码语言:javascript
复制
/usr/bin/php -q /PATH/TO/PHP/SCRIPT/cli_admin.php cli product_list_edit 20 | at -m 2206 21.02.2019 >> /var/log/at_log.log 2>&1

这似乎会导致脚本立即运行,以及计划稍后运行的内容(重复的条目是我在putty窗口中直接测试命令):

代码语言:javascript
复制
atq
75      Thu Feb 21 22:06:00 2019 a staging
76      Thu Feb 21 22:06:00 2019 a root
74      Thu Feb 21 21:43:00 2019 a staging
EN

回答 1

Unix & Linux用户

发布于 2019-02-21 18:25:22

这似乎是对at从何处获取要执行的命令的误解。

at命令读取要从其标准输入执行的命令。

如果希望at在特定时间执行php命令,则需要将该命令(而不是它的输出)输入at:

代码语言:javascript
复制
echo '/usr/bin/php -q /PATH/TO/PHP/SCRIPT/cli_admin.php cli product_list_edit 20' | at ...

或者,

代码语言:javascript
复制
at ... <<END_JOB
/usr/bin/php \
    -q /PATH/TO/PHP/SCRIPT/cli_admin.php \
    cli product_list_edit 20
END_JOB

(其中...是at的选项)。

或者,从文件中读取命令,

代码语言:javascript
复制
at -f filename ...
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/502140

复制
相关文章

相似问题

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