重新启动Apache终止后台进程


Restarting Apache kill background process

我有一个脚本startbg.php:

echo `/usr/bin/php $dir/runbg.php >> $dir/logbg.txt 2>&1 &`;

我从网络上调用(通过HTTP/Apache)。

它在后台进程中运行runbg.php

但是,如果我重新启动Apache(/etc/init.d/apache2 restart),后台进程就会被终止。

我是否可以在后台保持进程运行?

您可以打开PHP内部web服务器的实例(从PHP 5.4.0开始,CLI SAPI提供了一个内置的web服务器。)在我的测试中,httpd.exe没有影响php.exe:8000

<?php 
//Tested with windows
chdir('../php');
//S = Server, listen interface 0.0.0.0 = all : port 8000
//t = Served document root
echo `php -S 0.0.0.0:8000 -t C:''xampp''htdocs >> C:''xampp''htdocs''logbg.txt 2>&1 &`;
?>

所以可能(未经测试):

echo `/usr/bin/php -S 0.0.0.0:8000 -t /srv/www/yoursite.com/public_html >> /srv/www/yoursite.com/public_html/logbg.txt 2>&1 &$dir/runbg.php >> $dir/logbg.txt 2>&1 &`;

Tho-id不知道如何杀死它:s

您应该更改startbg.phprunbg.php的流程组id。

Apache/PHP向其进程组的所有子级发送信号。我找不到有关该功能的任何文档。但是,我通过从派生中调用setpgid()解决了这个问题过程

允许进程在没有apache的情况下继续运行的一种方法是将其作为服务。然后用您的命令激活服务(服务runbg-start)。如果您没有使服务正常运行,那么它将取决于您的命令在重新启动后启动,但不会随着apache的重新启动而消亡。