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