0

我尝试使用“at”命令计划一次性工作。脚本中有下一个代码:

$cmd = 'echo "/usr/bin/php '.$script_dir.$script_name.' '.$args.'"|/usr/bin/at "'.$time.'" 2>&1';
exec($cmd, $output , $exit_code);

当我从脚本运行此命令时,它会将作业添加到计划中。我在日志中的行中看到了这一点job 103 at Thu Sep 3 15:08:00 2015(相同的文本包含$output)。但是在指定的时间内没有任何事情发生,比如at忽略这项工作。并且日志中没有错误消息。

当我从服务器上的命令行运行具有相同参数的相同命令时,它会安排作业并在指定时间运行它。

我发现当我尝试通过 php 脚本计划工作时,它在apache用户下运行。我尝试在服务器上的命令行中运行下一个:

sudo -u apache echo "/usr/bin/php /var/www/pant/data/www/pant.com/scripts/Run.php firstarg secondarg "|/usr/bin/at "16:00 03.09.2015"

它也可以正常工作。我检查了 sudoers 并添加了具有 NOPASSWD 权限的 apache 用户。Script Run.php 具有执行权限。

at.deny是空的。at.allow不存在。

所以问题是:为什么'at'不运行通过php脚本(exec)给出的命令,而是在命令行中运行相同的命令?如何运行它?谢谢大家。

4

1 回答 1

0

我在stackexchange.com上偶然发现了答案:

“问题”通常是 PHP 旨在作为网络服务器中的模块运行。您可能需要先安装 php 的命令行版本,然后才能从命令行运行 php 脚本

于 2015-09-04T21:18:07.947 回答