【发布时间】:2012-06-10 12:22:49
【问题描述】:
我一直在与exec() 搏斗,试图在使用at Unix 系统命令添加任务时捕获它的输出。我的问题是从我的脚本运行时它没有输出,但是从终端 和 PHP 以交互模式运行它会打印出几行。
我要执行的命令是这样的:
echo exec("echo 'php -f /path/to/file.php foo=1' | at now + 1 minutes", $result);
var_dump() 给出string(0) "",而print_r() 吐出Array ()。我试过使用shell_exec(),它会输出NULL,但是在网页上下文中运行时会输出hi:
echo exec("echo 'hi'");
这也输出东西:
echo exec("atq");
但是,一旦我使用at,就没有任何输出。如何获得以下输出:
exec("echo 'php -f /path/to/file.php foo=1' | at now + 1 minutes", $result);
因为目前它在 PHP 通过 Apache 以“正常”方式运行时不输出任何内容,但是在终端以及 PHP 的交互式控制台中运行该命令会给我以下预期结果:
php > echo exec("echo 'php -f /path/to/file.php foo=1' | at now + 1 minutes", $result);
warning: commands will be executed using /bin/sh
job 1219 at Sun Jun 10 12:43:00 2012
safe_mode 已关闭,我无法弄清楚为什么在执行atq 或使用exec() 执行任何其他命令时,我没有从at 使用管道回显语句获得任何输出给我输出.我已经搜索并阅读了this question,但都无济于事。
如果使用带有exec() 的第二个参数,如何让exec() 将at 的输出返回到字符串或数组?
【问题讨论】:
-
闻起来像 seLinux 或其他权限问题。即使没有看到任何输出,任务是否也会被安排?
-
是的,即使没有输出,它也会被安排。运行
sudo atq会列出新任务。