Apache故障的解決一例
2024-08-27 18:28:29
供稿:網友
故障現象:
在一臺服務器上,以wacos用戶啟動apache進程,啟動后立刻使用命令ps –ef | grep httpd能夠看到一個進程被啟動,但是稍候訪問web界面就報錯,再使用命令ps –ef | grep httpd,發現進程已經宕掉。
詢問現場工程師進行過的操作以后,得知之前進行了服務端口的重新綁定。
檢查apache的錯誤日志文件error_log,發現有如下的告警:
[warn] pid file /opt/wacos/tools/apache/logs/httpd.pid overwritten -- unclean shutdown of previous apache run?
故障描述:
在一臺服務器上,以wacos用戶啟動apache進程,啟動后立刻使用命令ps –ef | grep httpd能夠看到一個進程被啟動,但是稍候訪問web界面就報錯,再使用命令ps –ef | grep httpd,發現進程已經宕掉。
詢問現場工程師進行過的操作以后,得知之前進行了服務端口的重新綁定。
檢查apache的錯誤日志文件error_log,發現有如下的告警:
[warn] pid file /opt/wacos/tools/apache/logs/httpd.pid overwritten -- unclean shutdown of previous apache run?
懷疑與apache的pid記錄文件或者配置文件有關(因為現場改動了apache的監聽端口)。于是打開兩個登錄窗口,一個窗口用tail –f error_log監視錯誤日志文件的輸出情況,另一個窗口則啟動apache的服務。
在啟動apache后,發現錯誤日志文件輸出如下內容:
[thu jun 24 21:54:27 2004] [warn] pid file /opt/wacos/tools/apache/logs/httpd.pid overwritten -- unclean shutdown of previous apache run?
fopen: permission denied
httpd: could not log pid to file /opt/wacos/tools/apache/logs/httpd.pid
進入到/opt/wacos/tools/apache/logs使用ls –l httpd.pid檢查httpd.pid文件的屬性,發現該文件的屬性如下:
-rw-r--r-- 1 root others 4 jun 25 14:58 httpd.pid
其屬主是root,而且又沒有向其他用戶放開寫權限,使用wacos用戶啟動apache,apache試圖改寫httpd.pid文件時,肯定就會失敗了。而這個文件記錄了apache啟動后的進程標識(pid,process id),對于httpd服務有著及其重要的作用,這樣httpd進程當然會退出了。
故障分析:
估計是有相關的人員在日常維護中,使用root用戶啟動apache,導致httpd.pid文件的屬主變成了root,導致后來使用wacos用戶啟動apache時,apache會嘗試寫httpd.pid以便記錄自己的pid進程號,但是由于httpd.pid目前的屬主是root使用wacos用戶修改httpd.pid文件肯定會失敗。
故障處理:
定位到了問題以后,采用了如下的解決方法。
進入到/opt/wacos/tools/apache/logs目錄,刪除httpd.pid文件。然后以wacos用戶重新啟動apache,成功啟動apache。