我尝试使用“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)给出的命令,而是在命令行中运行相同的命令?如何运行它?谢谢大家。