2011-06-23 54 views
4

我必須通過exec()運行2個命令; 第一個命令是調用(Plesk面板)子包的包裝, 第二個也是一個plesk命令,用於dns。php exec多重命令,apache重啓

注意:在我執行的添加訂閱,在Apache將重新啓動!

所以我的問題是: 我可以調用EXEC不知何故,在Linux機器上沒有第二個命令的損失既執行命令?

例:

exec(("/wrapper2 3 --create ... && /wrapper2 4 --update-soa example.com ...) > /dev/null 2>&1); 

腓都將命令發送到Linux來執行,或在第一命令之後,將重新啓動Apache,然後我不能執行所述第二命令?

感謝

+0

wrapper2實際上是什麼?如果它是一個php腳本,它獨立於Apache運行 – Leif

+0

如果你在你的exec腳本中放了一個分號,它應該在另一個腳本之後運行一個腳本,如果你重新啓動apache在執行第二個腳本之前,它會等待apache重新啓動 – FinalForm

+0

所以你說你在重啓apache的時候重啓了你自己的腳本? – hakre

回答

0

將命令放入shell腳本並執行該腳本。它不那麼複雜,以防萬一你可以用其他工具調用它,就像在apache重啓或通過cron一樣。

+0

我不認爲分組在單個文件下的命令將保護進程被終止,如果有一個呼叫來重新啓動Apache腳本中的任何地方或下標... – Julien

+0

@Julien我不認爲OP會接受這個答案,如果這將有一直如此。 – hakre

0

我想,爲什麼阿帕奇重啓你的命令執行過長或成本多少系統資源,使Apache的子進程退出。 嘗試使用fastcgi模式而不是mod_php。

您可以使shell文件執行兩個命令。

+0

Apache重啓,因爲當我添加一個訂閱時它必須(〜4secs) – Kszili

+0

你在寫一個web面板來控制apache配置嗎?:)嘗試使用另一個配置文件程序重新啓動Apache並執行你的其他命令會更好。或者嘗試fastcgi,它是在apache之外執行的。 – hanguofeng

2

嗯......我想的不好處理。一般來說,當進程需要繼續運行時,進程告訴它的父進程重新啓動是一個壞主意。但是,即使這是一個好主意 - 在這種情況下,Apache是​​PHP的父進程(做ps -A,你不會看到PHP),我無法想象它會讓你重啓它並繼續運行在同時。

我會這樣處理它:如果你可以連接一個延遲,然後讓一個cron作業尋找一個特定的文件是否存在,如果存在,那麼執行你需要的兩個命令。在最糟糕的情況下,讓PHP輸出一個文件,其中包含要運行的兩個命令,然後讓cron運行該文件。

+0

我喜歡使用文件+ cron的開箱即用方法,我也想到了這種方法,然後用'at'找到了這個答案http://stackoverflow.com/a/223745/457589當你想到它時, 'at'正在創建腳本文件並查找它......所以不需要使用cron來重建那個輪子...... at'也能立即運行,當cron每分鐘運行時 – Julien

1

從我的理解中,問題在於Apache將會成爲正在運行的腳本的父代,當Apache關閉時,腳本也會關閉。

除非您可以處理某種derp-y設置,否則您可以設置一個cron作業,查找何時需要重新啓動服務器(通過觸摸或PHP創建的文件),哪個可以處理Apache流程環境以外的所有事情。

一種有點骯髒的想法。 :(

+0

我想到了同樣的事情,然後用'at'找到了這個答案http://stackoverflow.com/a/223745/457589當你想到它時,'at'正在創建腳本文件並查找它...所以不需要使用cron來重建那個輪子。當atron每分鐘運行時,'at'也有立即運行的好處 – Julien