用shell 脚本写守护进程

最近在做服务器,因为是全天候运行,服务器也不是说百分之百稳定,永远不崩溃永不宕机啥的,所以就算宕机了也不要紧,关键是能及时启动,不能影响玩家体验,所以

必须得有守护进程守护着,如果服务器一崩溃,立马重启,保证整个业务能继续运行

我的启动脚本 start.sh

  1. #!/bin/sh  
  2. killall -9 logserver  
  3. sleep 1  
  4. killall -9 gameserver  
  5. mv logserver.log /mnt/share/log/logserver.log.bak  
  6. mv gameserver.log /mnt/share/log/gameserver.log.bak  
  7. ulimit -c unlimited  
  8. nohup ./logserver > logserver.log 2>&1 &  
  9. sleep 5  
  10. nohup ./gameserver > gameserver.log 2>&1 &  
  11. sleep 5  
  12. echo start success  

守护进程脚本 keep.sh

  1. #########################################################################  
  2. # File Name: keep.sh  
  3. # Author: ma6174  
  4. # mail: ma6174@163.com  
  5. # Created Time: Fri 16 Jan 2015 07:49:46 PM CST  
  6. #########################################################################  
  7. #!/bin/bash  
  8. num=1  
  9. iNum=1  
  10. echo $$  
  11. while(( $num < 5 ))  
  12. do  
  13. sn=`ps -ef | grep ./gameserver | grep -v grep |awk ’{print $2}’`  
  14. echo $sn  
  15. if [ ”${sn}” = ”“ ]    #如果为空,表示进程未启动  
  16. then  
  17. let “iNum++”  
  18. echo $iNum  
  19. cp gameserver.log /mnt/share/log/gameserver_$iNum.log.bak  
  20. rm gameserver.log  
  21. nohup ./gameserver > gameserver.log 2>&1 & #后台启动进程  
  22. echo start ok !  
  23. else  
  24. echo running  
  25. fi  
  26. sleep 5  
  27. done  


整个流程是

1. ./start.sh

2. ./keep.sh > keep.log 2>&1 &

注意  在 keep.sh 里面 echo $$ 是输出当前进程号,因为shell 脚本启动之后,是很难去查其进程号,没有进程号,就很难杀死该shell脚本启动对应的

进程 ,从keep.log 找到该进程号,kill -s 9 pid 即可

./keep.sh > keep.log 2>&1 &  这个一定要这么写,因为大部分是通过终端连接ubuntu,直接./keep.sh 的话就没法在后端运行,如果终端关闭,那该脚本对应的进程也被自动杀死掉,守护进程就不存在了


最近重新试了一次,发现  ./keep.sh > keep.log 2>&1 & 确实可以在后台运行,但是关掉终端之后,收到hup信号,该脚本还是中

断了,起不了效果。用nohup 也提示很多错误,keep.sh这个脚本还是跑不起来,看来不能终端上执行  ./keep.sh > keep.log 2>&1 & 只能在 screen 会话模式, 关于screen 可以见如下文档

https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/

先安装screen

apt-get install screen 

再建一个会话
screen -dmS Urumchi

再看这个会话是事成功
screen -list

连上这个会话
screen -r Urumchi

再执行keep.sh脚本
./keep.sh > keep.log 2>&1 &









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值