我想运行" at" shell的命令并返回结果状态,我使用以下脚本在预定作业列表中添加一个条目,并在一分钟后执行它(仅作为示例):
try{
$output = shell_exec("at now + 1 minutes \n curl http://www.mysite.com/test.php?key=value");
echo $output;
}
catch (Exception $e) {
echo "Error :" . $e->getMessage();
}
命令执行得很好(我用" atq" shell命令检查了这一点,并且页面test.php的脚本也在一分钟后按计划执行了)但是变量$ output什么都没有返回! / p>
我使用了exec,system和passthru函数而不是shell_exec,但总是没有输出。
我希望使用此函数的返回值来检索添加的作业ID并保留以供以后使用(例如删除此作业)。
答案 0 :(得分:0)
不会像这样工作。使用换行符分隔的程序输入数据不是调用程序的shell命令的一部分。这些数据一旦运行就需要传递给程序的STDIN。
您必须打开程序并拥有标准输入和标准输出的资源指针。你可以读/写他们
看一下这个php函数的文档和示例:
http://www.php.net/manual/en/function.proc-open.php
至于“如何获得输出”:
这在某种程度上是无关紧要的,因为您不能像使用此方法那样使用该程序。但如果您只想从STDOUT捕获/传递数据,则可以使用passthru()。你可以打开输出缓冲来捕获输出。例如,如果你想在调用它的php-cli脚本中显示rsync的状态栏,它会很有用。
答案 1 :(得分:0)
您可以使用echo
管道来执行您想要的操作,而不是尝试像这样设置命令:
try{
$output = shell_exec('echo "curl \'http://www.mysite.com/test.php?key=value\'" | at now + 1 minutes');
echo $output;
}
catch (Exception $e) {
echo "Error :" . $e->getMessage();
}