1. 程式人生 > >HP-UX系統頻繁報錯問題排查

HP-UX系統頻繁報錯問題排查

HP-UNIX EVM

1.錯誤信息描述

在重慶萬州進行設備巡檢時,發現CCS01A(HP UNIX B.11.31)服務器終端窗口頻繁彈出報錯,查看dmesg輸出信息和OLDsyslog.log全是該報錯以及/var分區滿了的信息,但是syslog.log在很久之前就沒有再被寫入內容,是空文件。

# 終端窗口頻繁出現的報錯信息
esmd: System Error: The EVM daemon has failed and cannot be restarted

技術分享圖片

2.syslog.log為空文件的問題解決辦法

重啟syslogd服務後解決,esmd: System Error: The EVM daemon has failed and cannot be restarted等相關報錯信息開始寫入日誌文件。

3.evm daemon頻繁報錯解決辦法

Event Management ( EVM )

在正常的服務器上執行命令:

ps -ef | grep evm*

可以得到以下結果,但是CCS01A(報錯服務器)上沒有任何關於evm的進程:

技術分享圖片

手動執行命令啟動evmd進程:

/usr/sbin/evmd

再次查看CCS01A上該進程已經存在,服務器不再報錯。

技術分享圖片

但是類似正常服務器的evmlogger 和 evmchmgr 相關進程並沒有啟動,按照正常服務器進程顯示的命令手動執行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服務後服務器也可以立刻將其自動啟動。

建議手動的開啟關閉evmd服務的方法是(==其實正常情況下該服務只要被關閉就會立刻自動啟動==):

evmstop
evmstart
也可以:
/sbin/init.d/evm stop
/sbin/init.d/evm start

4.糾結的排錯過程記錄

首先,在網上查找到的解決辦法是:

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服務後服務器也可以立刻將其自動啟動。至此該錯誤成功解決。

5.其他問題說明

關於命令解釋器的路徑問題:

在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.

HP-UX系統頻繁報錯問題排查