Linux

apache2在通過服務執行時失敗,但在直接執行時失敗

  • October 21, 2014

我的 apache 在啟動和手動使用時執行得很好/etc/init.d/apache2 start,我對此很好,但是其中一個伺服器管理器習慣於使用 service 命令,並且由於某種原因,apache 無法通過服務正常執行。

如果我直接執行它,我會得到:

Start
...[OK]

Stop
...[OK]

Help
Usage: /etc/apache2/bin/httpd [-D name] [-d directory] [-f file]
...

但是當我嘗試通過 service 命令執行它時,我得到:

Start
start: Job failed to start

Stop
stop: Unknown instance:

Help
Usage: /etc/apache2/bin/httpd [-D name] [-d directory] [-f file]
...

我以前認為它們指向不同的執行檔,但根據 help 的使用輸出,它們都指向/etc/apache2/bin/apachectl,而後者又指向/etc/apache2/bin/httpd. 也向我表明服務找不到正在執行的 httpd 程序(可能是因為它被稱為 httpd 而不是 apache2)。

為什麼這兩種呼叫同一個 exe 的方法(它實際上是一個腳本,但這不重要)會產生不同的結果?

經過一些研究和弄亂文件後,我發現了問題所在。

對我來說,問題在於 Upstart 與 sysvinit 的向後兼容性導致兩個文件之間的透明衝突。Upstart 支持目錄中的腳本,該/etc/init.d目錄具有對 sysvinit 的向後兼容性支持,因為這是 sysvinit 用於腳本的舊目錄。然而,Upstart 使用/etc/init/它的腳本。預期用途是在一個或另一個目錄中有一個腳本。我的問題歸結為我兩者都有(我仍然不確定/etc/init/腳本是如何到達那裡的)。由於 init.d 中的腳本/etc/init不是功能腳本(它指向錯誤的 apache exe),因此它在啟動時失敗,這很好,因為 init.d 中的腳本正在執行。但是一旦我嘗試通過服務執行它,錯誤就變得可見。

我刪除/etc/init/apache2.conf了,現在服務 apache2 正確地指向 init.d 中的腳本,就像我想要的那樣。

引用自:https://serverfault.com/questions/638582