我有一些我希望作为后台进程运行的PHP代码。该代码检查数据库以查看它是否应该执行任何操作,并在再次检查之前执行该操作或暂停一段时间。当它执行某些操作时,它会向stdout输出一些内容,因此,当我从命令行运行代码时,我通常会以明显的方式将PHP进程的输出重定向到文件:php code.php > code.log &
。
代码本身在从shell运行时工作正常;我现在正试图让它在从Web进程启动时运行 - 我有一个页面确定PHP进程是否正在运行,并让我启动或停止它,具体取决于。我可以通过以下方式开始这个过程:
$the_command = "/bin/php code.php > /tmp/code.out &";
$the_result = exec($the_command, $output, $retval);
但是(这就是问题!)输出文件 - /tmp/code.out
- 没有被创建。我已经尝试了exec
,shell_exec
和system
的所有变体,但没有一个会创建该文件。 (现在,我将文件放入/tmp
以避免所有权/许可问题,顺便说一句。)我错过了什么吗?在这种情况下,重定向是否会起作用?
答案 0 :(得分:1)
似乎是权限问题。解决这个问题的一种方法是:
echo($data)
语句重命名为fecho($data)
function fecho($data)
{
$fp = fopen('/tmp/code.out', 'a+');
fwrite($fp, $data);
fclose($fp);
}
答案 1 :(得分:0)
Blurgh。经过一天的黑客攻击后,这个问题终于得到了解决:
为什么会这样,我不知道。但是为未来的访客提供了一些注意事项:
/tmp/systemd-private-Pf0qG9/
形式的目录,其中后一部分是一组不同的随机字符。我在几个目录中发现了一些过时版本的日志文件。我认为这是某种Fedora-ism文件系统juju,我将承认不理解,并且这些是我的一些进程黑客/杀戮遗留下来的孤立文件。exec()
,shell_exec()
,system()
和passthru()
似乎都能正常工作。底线:只要你在正确的地方做了,事实上应该做什么工作。我现在要原谅我要照顾一大瓶装有我名字的葡萄酒,并想想我的日子本来可能会花费多少......