首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在php中获得"at“shell命令输出?

问如何在php中获得"at“shell命令输出?
EN

Stack Overflow用户
提问于 2011-05-29 02:54:55
回答 2查看 962关注 0票数 0

我想运行shell的"at“命令并返回结果状态,我使用了以下脚本,该脚本在计划的作业列表中添加一个条目,并在一分钟后执行它(只是一个示例):

代码语言:javascript
复制
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,并保留它以供以后使用(例如,删除此作业)。

EN

回答 2

Stack Overflow用户

发布于 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的状态栏,它就很有用。

票数 0
EN

Stack Overflow用户

发布于 2011-05-29 03:18:46

您可以使用带有管道的echo来执行您想要的操作,而不是尝试像这样设置命令:

代码语言:javascript
复制
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();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6163763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档