我想运行shell的"at“命令并返回结果状态,我使用了以下脚本,该脚本在计划的作业列表中添加一个条目,并在一分钟后执行它(只是一个示例):
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什么也没有返回!
我使用exec、system和passthru函数而不是shell_exec作为输出,但总是什么都没有。
我想要此函数的返回值来检索添加的作业ID,并保留它以供以后使用(例如,删除此作业)。
发布于 2011-05-29 03:04:17
这不会像这样工作的。使用换行符分隔的程序输入数据不是调用该程序的shell命令的一部分。一旦程序运行,就需要将这些数据传递给程序的STDIN。
您必须打开程序,并具有用于标准输入和标准输出的资源指针。然后你可以对它们进行读写操作
请看一下此php函数的文档和示例:
http://www.php.net/manual/en/function.proc-open.php
至于“如何获取输出”:
这在某种程度上是无关紧要的,因为你不能像你希望的那样使用这个方法。但是,如果您只想捕获/传递来自STDOUT的数据,则可以使用passthru()。您可以打开输出缓冲来捕获输出。例如,如果你想在调用rsync的php-cli脚本中显示rsync的状态栏,它就很有用。
发布于 2011-05-29 03:18:46
您可以使用带有管道的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();
}https://stackoverflow.com/questions/6163763
复制相似问题