我正在通过PHP访问Web服务器。我想更新Apache配置中的一些信息,因此我启动了一个进行更改的shell脚本。然后我想停止并重新启动Apache。Fork shell脚本(不是&)
问题:只要我停止Apache,我的进程停止,我的shell脚本作为子进程被终止。 Apache从不重新启动。 Apache重启也会发生这种情况。
有没有办法为shell脚本分离独立的非子进程,这样我可以重新启动Apache?
THX, B先生
我正在通过PHP访问Web服务器。我想更新Apache配置中的一些信息,因此我启动了一个进行更改的shell脚本。然后我想停止并重新启动Apache。Fork shell脚本(不是&)
问题:只要我停止Apache,我的进程停止,我的shell脚本作为子进程被终止。 Apache从不重新启动。 Apache重启也会发生这种情况。
有没有办法为shell脚本分离独立的非子进程,这样我可以重新启动Apache?
THX, B先生
您可以使用disown
:
disown [-ar] [-h] [jobspec ...]
不带选项,每个JOBSPEC从活动作业表中删除。如果给出了'-h'选项,作业不会从表中删除,但会被标记,以便在shell收到SIGHUP时SIGHUP不会发送到作业。如果jobspec不存在,既没有提供`-a'也没有`-r'选项,则使用当前作业。如果没有提供jobspec,`-a'选项意味着删除或标记所有作业;没有jobspec参数的`-r'选项将操作限制为正在运行的作业。
./myscript.sh &
disown
./myscript.sh
将继续运行,即使启动它的脚本死亡。
看看nohup,可能适合您的需求。
让我们假设你有一个名为test.sh
for i in $(seq 100); do
echo $i >> test.temp
sleep 1;
done
脚本如果您运行的nohup ./test.sh &你可以杀死外壳和过程活路。
什么是命令? `/etc/init.d/apache2 stop`?也许你可以使用`/etc/init.d/apache2 restart`? PS。无论谁提出与`apachectl`相同的建议,都不需要删除评论,因为它与另一个类似。 – Benoit 2011-01-27 13:39:54
也许apachectl优雅可能是一个更好的选择... – 2011-01-27 13:50:25