安庆

导航

suse 关于使用 /etc/init.d/boot.local的问题

最近看了一个问题,有同事在 suse环境下的/etc/init.d/boot.local 中,增加了一行脚本。

该脚本的简单大意如下:

#!/bin/bash
while [ 1 ]
do
   if [ $(ps -ef |grep -i java|grep -v grep|wc -l) -gt 0 ]
   then
      echo "find java process"
      break;
   else
      echo "can't find process"
      sleep 2
      continue;
   fi
done

本来应该是最终走分支if的,但是运行发现,该脚本在java运行之后,也没能退出。

手工执行该脚本,也能正常退出,不会一直循环,那是什么原因导致的脚本不退出呢?

唯一的可能就是if条件不满足。

最后发现,要是条件判断满足,前提是,正常的runlevel,因为/etc/init.d/boot.local 这个脚本是由 /etc/init.d/boot 这个script 所启动的,而且是最后 boot script 工作完成要准备进入 runlevel 环境执行各项 rc script 前所执行。而 rh 的 /etc/rc.d/rc.local 脚本是 runlevel 环境执行各项 rc script 時最后一个阶段所执行的。

所以,哪怕最后进入了正常的runlevl,但是该脚本的运行环境中,ps -ef 和我们手工执行看到的ps -ef 是不一致的。

posted on 2018-02-06 17:57  _备忘录  阅读(498)  评论(0编辑  收藏  举报