[英]How to get the “at” shell command output in php?
我想运行 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 function 而不是 shell_exec,但总是没有 output。
我想要这个 function 的返回值来检索添加的作业 ID 并保留它以供以后使用(例如删除此作业)。
这不会像这样工作。 您使用换行符分隔的程序输入数据不是调用程序的 shell 命令的一部分。 一旦程序运行,此数据需要传递给程序的 STDIN。
您必须打开程序并拥有标准输入和标准 output 的资源指针。 比你可以读/写到/从他们
查看此 php function 的文档和示例:
http://www.php.net/manual/en/function.proc-open.php
至于“如何获得输出”:
这在某种程度上是无关紧要的,因为您无法使用这种方法使用您可能希望的程序。 但如果您只想从 STDOUT 捕获/传递数据,您可以使用 passthru()。 您可以打开 output 缓冲来捕获 output。 例如,如果您想在调用它的 php-cli 脚本中显示 rsync 的状态栏,它很有用。
您可以使用echo
和 pipe 来执行您想要的操作,而不是尝试像那样设置您的命令:
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();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.