PHP EXEC命令(或类似)不等待结果
我有一个我想运行的命令,但是我不想让PHP坐下来等待结果。
<?php echo "Starting Script"; exec('run_baby_run'); echo "Thanks, Script is running in background"; ?>
有没有可能让PHP不等待结果..即只是踢开,并移动到下一个命令。
我找不到任何东西,并不确定它甚至可能。 我能find的最好的就是有人在一分钟内开始CRON工作。
检查文档总是很好的 :
为了执行一个命令有它不会挂在你的PHP脚本,而它运行,你运行的程序不能输出回到PHP。 为此,将stdout和stderrredirect到/ dev / null,然后将其背景化。
>
/dev/null 2>&1 &
为了执行一个命令,并将其作为另一个不依赖于apache线程继续运行的进程产生(不会因为某人取消页面而死掉)运行:
exec('bash -c "exec nohup setsid your_command > /dev/null 2>&1 &"');
您可以在后台运行该命令,在末尾添加&
:
exec('run_baby_run &');
但是单独做这件事将会使您的脚本挂起,因为
如果一个程序以exec函数启动,为了继续在后台运行,程序的输出必须被redirect到一个文件或另一个输出stream。 如果不这样做将导致PHP挂起,直到程序执行结束。
所以你可以把命令的stdoutredirect到一个文件,如果你想稍后看到它,或者如果你想放弃它的话,可以把它/dev/null
为/dev/null
:
exec('run_baby_run > /dev/null &');
好的,这里是最后的明确正确的获奖答案;-)
这使用wget通知URL的东西没有等待。
$command = 'wget -qO- http://test.com/data=data'; exec('nohup ' . $command . ' >> /dev/null 2>&1 echo $!', $pid);
这使用ls来更新日志而不用等待。
$command = 'ls -la > content.log'; exec('nohup ' . $command . ' >> /dev/null 2>&1 echo $!', $pid);
“exec nohup setsid your_command”
nohup允许your_command继续,即使启动的进程可能会先终止。 如果是这样,SIGNUP信号将被发送到your_command,使其终止(除非它捕获该信号并忽略它)。