在重慶萬州進行設備巡檢時,發現CCS01A(HP UNIX B.11.31)服務器終端窗口頻繁彈出報錯,查看dmesg輸出信息和OLDsyslog.log全是該報錯以及/var分區滿了的信息,可是syslog.log在好久以前就沒有再被寫入內容,是空文件。shell
# 終端窗口頻繁出現的報錯信息 esmd: System Error: The EVM daemon has failed and cannot be restarted
重啓syslogd服務後解決,esmd: System Error: The EVM daemon has failed and cannot be restarted等相關報錯信息開始寫入日誌文件。服務器
Event Management ( EVM )ide
在正常的服務器上執行命令:this
ps -ef | grep evm*
能夠獲得如下結果,可是CCS01A(報錯服務器)上沒有任何關於evm的進程:rest
手動執行命令啓動evmd進程:日誌
/usr/sbin/evmd
再次查看CCS01A上該進程已經存在,服務器再也不報錯。code
可是相似正常服務器的evmlogger 和 evmchmgr 相關進程並無啓動,按照正常服務器進程顯示的命令手動執行evmlogger 和 evmchmgr相關命令,服務器報錯:進程
interpreter "/bin/sh" not found
和正常的服務器進行對比發現:正常的服務器上存在:/bin -> /usr/bin 的軟連接,而CCS01A上沒有,所以在CCS01A上新建軟連接,並修改其屬主和屬組:ip
ln -s /usr/bin /bin chown -h bin:bin /bin
修改後,CCS01A evm相關服務正常啓動,關閉evmd服務後服務器也能夠馬上將其自動啓動。it
建議手動的開啓關閉evmd服務的方法是(==其實正常狀況下該服務只要被關閉就會馬上自動啓動==):
evmstop evmstart 也能夠: /sbin/init.d/evm stop /sbin/init.d/evm start
首先,在網上查找到的解決辦法是:
if you have same issue you can try to Copy evmstart and evmstop scripts from the good host. Then the issue is solved.
也就是說在將正常的服務器的evmstart和evmstop文件拷貝到報錯的服務器上便可,可使用以下命令查找這兩個文件:
find / -name evmstart find / -name evmstop
首先將CCS01A服務器的原文件進行備份,而後將正常的文件拷貝至CCS01A,注意修改文件的屬主屬組和權限。
可是我發現拷貝正確的文件後CCS01A仍然會報錯,因而在正常的服務器上查看evm相關的進程:
ps -ef | grep evm*
發現正常服務器上有進程:/usr/sbin/evmd 進程,而CCS01A上沒有,因而在CCS01A上將該進程開啓,執行命令:
/usr/sbin/evmd
再次查看CCS01A上該進程已經存在,服務器再也不報錯,而後搜索了evmd服務的開啓及關閉方法,以下:
# HP UNIX 重啓evmd服務的方法: # 方法一: •/sbin/init.d/evm stop •/sbin/init.d/evm start # 方法二(方法一應該是是正規作法): •殺死evmd進程 kill -9 PID •執行命令/usr/sbin/evmd # 方法三(該方法是從/sbin/init.d/evm腳本中看到的): •evmstop •evmstart
本覺得這樣就完全解決了問題,心血來潮決定重啓一下evmd 服務試試,結果再次頻繁發生報錯,而且使用/sbin/init.d/evm start命令沒法啓動evmd服務,重啓過程見下圖:
因而查看/sbin/init.d/evm 文件,發現該腳本建議使用evmstart 和evmstop 來手動開啓關閉evmd服務,而且該腳本也是調用的這兩個命令,因而執行evmstart 來開啓evmd服務,結果仍是報錯:
報錯中提示/bin/sh 找不到,查看evmstart 腳本,發現其開頭指定的命令解釋器爲:#!/bin/sh.在終端窗口執行命令: which sh 得出的結果倒是:/usr/bin/sh,其餘正常的服務器都是:/bin/sh
這裏開始主觀的認爲正常的服務器sh命令是在/bin/sh目錄下,而報錯的CCS01A則因爲未知緣由致使sh在/usr/bin目錄下
因而把/usr/sbin目錄下evm*相關的腳本開頭的命令解釋器都修改成:#!/usr/bin/sh,再次執行evmstart 後,evmd服務正常啓動,對其進行重啓:
evmstop evmstart 或者 /sbin/init.d/evm stop /sbin/init.d/evm start
系統再也不報錯,其實關閉該服務後,系統會很快自動將其開啓,無需手動開啓evmd服務。見下圖:
最後和正常的服務器進行對比,又發現CCS01A上關於evm的進程比較少,正常服務器進程以下:
因而按照正常服務器進程顯示的命令手動執行evmlogger 和 evmchmgr相關命令,服務器報錯:
interpreter "/bin/sh" not found
和正常的服務器進行對比發現:正常的服務器上存在:/bin -> /usr/bin 的軟連接,而CCS01A上沒有,所以在CCS01A上新建軟連接,並修改其屬主和屬組:
# 新建軟連接 ln -s /usr/bin /bin chown -h bin:bin /bin
修改後,CCS01A evm相關服務正常啓動,關閉evmd服務後服務器也能夠馬上將其自動啓動。至此該錯誤成功解決。
關於命令解釋器的路徑問題:
在CCS01A終端窗口執行命令: which sh 得出的結果倒是:/usr/bin/sh,其餘正常的服務器都是:/bin/sh
能夠用which命令顯示系統命令路徑的順序來解釋:
which命令的做用是,在PATH變量指定的路徑中,搜索某個系統命令的位置,而且返回第一個搜索結果。也就是說,使用which命令,就能夠看到某個系統命令是否存在,以及執行的究竟是哪個位置的命令。
在CCS01A建立完軟連接後,只須要修改當前的PATH變量便可使其和其餘服務器顯示的路徑一致:
PATH=/bin:$PATH
爲避免有其餘影響,本次未對CCS01A進行PATH變量修改。
在網上索搜到的另一種解決辦法以下,可是實驗後並無解決問題,如今也將這種方法列出,僅供參考:
Hello freinds, Above mentioned problem is solved. Problem was solved by this way - Ensure that there is softlink between / directory to the directory which contains evmstop and evmstop script files. Command i used is ln -s /usr/bin2 / Thanks for your support.