我跑在CentOS Apache服務器,並想用下面才能夠重新開始從受保護的頁面的Web服務器:Apache關閉後的PHP?
PHP:
<?php
ignore_user_abort(true);
shell_exec('sh sh/restart.sh');
?>
restart.sh:
service httpd restart
我的問題是,如果Web服務器關閉,PHP停止執行將sh腳本繼續運行,以使Web服務器重新聯機?
我跑在CentOS Apache服務器,並想用下面才能夠重新開始從受保護的頁面的Web服務器:Apache關閉後的PHP?
PHP:
<?php
ignore_user_abort(true);
shell_exec('sh sh/restart.sh');
?>
restart.sh:
service httpd restart
我的問題是,如果Web服務器關閉,PHP停止執行將sh腳本繼續運行,以使Web服務器重新聯機?
你應該沒問題,因爲在命令發佈之前Apache不關閉。但是,如果你真的想成爲安全,使用nohup:
shell_exec('nohup sh sh/restart.sh');
如果你的PHP運行作爲Apache模塊,那麼一旦你殺了httpd的腳本將立即終止。因此,您需要將重新啓動委派給命令行腳本(使用exec()
或shell_exec()
調用)
您可以在命令末尾添加&。這將分叉進程並在後臺運行。這樣它就不會依賴於仍在運行的apache。
shell_exec('sh sh/restart.sh &');
如果這可行,您不應該需要ignore_user_abort()。
當你嘗試過時發生了什麼? – 2012-11-04 19:12:19
運行'service httpd restart'需要root權限,不是嗎?我希望你的PHP頁面不能以root權限運行。 – Wyzard
PAM包可能允許他以root身份進行身份驗證來執行此操作。 http://pecl.php.net/package/PAM –