【问题标题】:use exec to run a process in the background and still write the output to a log file使用 exec 在后台运行进程,仍然将输出写入日志文件
【发布时间】:2016-01-15 18:26:12
【问题描述】:
我在手动运行的一个 php 脚本中有以下行:
exec("/usr/bin/php ".__DIR__."/driver.php > /dev/null &");
我怎样才能修改它,以便输出也写入日志文件(除了在后台运行)。以下对我不起作用:
exec("/usr/bin/php ".__DIR__."/driver1.php /tmp/log.txt > /dev/null &");
【问题讨论】:
标签:
php
shell
command-line
ssh
【解决方案1】:
我想exec("/usr/bin/php ".__DIR__."/driver.php >> /tmp/log.txt 2>&1");。
原始文件中的 > /dev/null 是发送输出的内容,但不会发送到日志文件。它转到 /dev/null。
>> /tmp/log.txt 应该将您的输出附加到 log.txt。
2>&1 也应该将错误输出重定向到这个日志文件。
【解决方案2】:
在 bash/shell 中,> 运算符告诉它在哪里写入输出。在您的原始命令中,输出被发送到/dev/null,这意味着它被丢弃了。相反,更新命令以指向您的日志文件:
exec("/usr/bin/php ".__DIR__."/driver1.php > /tmp/log.txt &");
如果您想将内容追加到该文件,但是(即不要在每次运行该命令时都替换它)您将需要使用>>:
exec("/usr/bin/php ".__DIR__."/driver1.php >> /tmp/log.txt &");