在重庆万州进行设备巡检时,发现CCS01A(HP UNIX B.11.31)服务器终端窗口频繁弹出报错,查看dmesg输出信息和OLDsyslog.log全是该报错以及/var分区满了的信息,但是syslog.log在很久之前就没有再被写入内容,是空文件。
# 终端窗口频繁出现的报错信息
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 )
在正常的服务器上执行命令:
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
首先,在网上查找到的解决办法是:
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.
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。