4

我目前正在使用 unixat命令来安排将来的作业。但是,如果我认为有必要,我也希望能够删除这些作业。有没有什么方法可以在创建工作后立即获得工作编号?我知道这atq可以显示待处理作业的列表,但我希望能够在创建作业后立即在 PHP 代码中获取作业编号。我可以运行该atq命令,但是如果在我获得队列中的最后一个作业之前创建了另一个作业怎么办?然后我没有正确的工作编号。

长话短说,在使用at命令创建作业后,有什么方法可以在不使用命令的情况下获得作业编号作为回报atq

例如,我的代码是:

exec('echo /usr/bin/php -f /home/site/public_html/test.php | sudo /usr/bin/at now');

我目前正在查看一条评论建议找出如何从这个 phpexec()代码中获取作业编号的命令替换。

当我尝试

var=$(echo /usr/bin/php -f /home/site/public_html/test.php | sudo /usr/bin/at now)

在外壳中,echo $var我得到一个空行。为什么不var保持输出?

4

2 回答 2

1
$x=exec("echo sleep|at 14:00 2>&1");
$match="";
if(preg_match("/^job\s*(\d+)\s*/",$x,$match)){
    $job= $match[1];
    print "job: ". $job . "\n";
}
于 2013-10-11T12:43:27.273 回答
0

尝试:

exec('at now "php /home/site/public_html/test.php" 2>&1 | grep job | awk "{print $2}", $output);
var_dump($output);

帮助来自:

https://superuser.com/questions/368328/have-the-at-command-return-the-job-id-of-the-task-just-submitted

于 2013-10-11T12:41:08.150 回答