以这次安装的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掉就可以了,有点暴力吧。。。
|