我正在通過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