HP-UX EVM daemon频繁报错问题排查

1.错误信息描述

在重庆万州进行设备巡检时,发现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

mark

2.syslog.log为空文件的问题解决办法

重启syslogd服务后解决,esmd: System Error: The EVM daemon has failed and cannot be restarted等相关报错信息开始写入日志文件。服务器

3.evm daemon频繁报错解决办法

Event Management ( EVM )ide

在正常的服务器上执行命令:this

ps -ef | grep evm*

能够获得如下结果,可是CCS01A(报错服务器)上没有任何关于evm的进程:rest

mark

手动执行命令启动evmd进程:日志

/usr/sbin/evmd

再次查看CCS01A上该进程已经存在,服务器再也不报错。code

mark

可是相似正常服务器的evmlogger 和 evmchmgr 相关进程并无启动,按照正常服务器进程显示的命令手动执行evmlogger 和 evmchmgr相关命令,服务器报错:进程

interpreter "/bin/sh" not found

和正常的服务器进行对比发现:正常的服务器上存在:/bin -> /usr/bin 的软连接,而CCS01A上没有,所以在CCS01A上新建软连接,并修改其属主和属组:ip

mark

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

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,注意修改文件的属主属组和权限。

mark

可是我发现拷贝正确的文件后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服务,重启过程见下图:

mark

mark

因而查看/sbin/init.d/evm 文件,发现该脚本建议使用evmstart 和evmstop 来手动开启关闭evmd服务,而且该脚本也是调用的这两个命令,因而执行evmstart 来开启evmd服务,结果仍是报错:

mark

报错中提示/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服务。见下图:

mark

最后和正常的服务器进行对比,又发现CCS01A上关于evm的进程比较少,正常服务器进程以下:

mark

因而按照正常服务器进程显示的命令手动执行evmlogger 和 evmchmgr相关命令,服务器报错:

interpreter "/bin/sh" not found

和正常的服务器进行对比发现:正常的服务器上存在:/bin -> /usr/bin 的软连接,而CCS01A上没有,所以在CCS01A上新建软连接,并修改其属主和属组:

mark

# 新建软连接
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.
相关文章
相关标签/搜索