Linux下将普通软件启动方式做成service方式

来源:互联网 发布:多态zpn官网mac 编辑:程序博客网 时间:2024/04/30 19:47

以这次安装的openmeeting为例:

        目录结构:/root/openmeeting_dirnary/admin.bat

                                        admin.sh 

                                        ...

                                        red5.sh

                                        red5-shutdown.bat

                                        red5-shutdown.sh

                                        ...

   如果要启动它我们普通的方式都是进入这个/root/openmeeting_dirnary/这个目录,

   执行:./red5.sh & (当然要有执行权限)

   现在我们要做的工作就是:

       将它的启动、关闭等方式做成service ..... stop|start|restart|status|restart的方式

   cd /etc/init.d/

   touch openmeetingd (我们自己起的名字,仿照一般的服务,比如httpd....)

   贴出该文件的代码,然后再细细解释:   

#start Red5 demon

start(){     #这一步没什么好说的,就是进入到目录,改权限,启动...

   echo "starting red5 ..."

   cd /root/openmeeting_binary/

   chmod 755 red5.sh

   ./red5.sh &

   echo "Red5 started successful ..."

}

#stop red5 demon

stop(){     # 在下面详细讲解 

   pid=`ps -ef|grep "java"|grep -v "grep"|awk '{print $2}'` 

   if [ "$pid" == "" ];then

      echo "No red5 pid alive ..."

   else

      echo "now , kill pid $pid ..."

      kill $pid

      echo "Red5 stopped successful ..."

   fi

}

#show the status of red5

status(){                #通过判断进程是否启动着,即pid是否存在为依据来判断状态

   pid=`ps -ef | grep "java" | grep -v "grep" | awk '{print $2}'`

   if [ "$pid" == "" ];then

      echo "red5 is stopped ..."

   else

      echo "red5 is running ..."

   fi

}

#restart red5 demo

restart(){         调用前面的函数,很简单吧...

   stop

   start

}

#execute by input command   根据输入的命令来判断应该执行什么

case "$1" in

  start)

     start

  ;;

  stop)

     stop

  ;;

  status)

     status

  ;;

  restart)

     restart

  ;;

  *)

     echo $"Usage: $0 {start|stop|status|restart}"

     exit 1

esac

 接下来我们重点讲解stop的时候执行的脚本:

     pid = `ps -ef | grep "java" | grep -v "grep" | awk '{print $2}'`   来获得进程的pid

     执行ps -ef | grep "java" 的效果图:

 

这句主要是找出red5的运行进程,这里是java,我们还可以看到第二个进程即我们刚刚执行的 grep java , 

为了只获得上面那一行的进行,即执行:

     ps -ef | grep "java" | grep -v "grep"

 

  到这里可以看到,只剩下一行了,就是我们想要的red5生存的标识

  grep 的这个 -v 的参数的意思是:显示不包含文本的所有行,就把刚才的第二行去掉了。

  

  执行:ps -ef | grep "java" | grep -v "grep" | awk '{print $2}' 

 

 

 可以看到现在只剩下一个数字了,即pid,就是我们想要得到的最终值。

  好了,接下来直接kill掉就可以了,有点暴力吧。。。