用shell 脚本写守护进程

来源:互联网 发布:微商一键转发软件 编辑:程序博客网 时间:2024/05/17 23:28

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

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

我的启动脚本 start.sh

[plain] view plain copy

!/bin/sh

killall -9 logserver
sleep 1
killall -9 gameserver
mv logserver.log /mnt/share/log/logserver.log.bak
mv gameserver.log /mnt/share/log/gameserver.log.bak
ulimit -c unlimited
nohup ./logserver > logserver.log 2>&1 &
sleep 5
nohup ./gameserver > gameserver.log 2>&1 &
sleep 5
echo start success

守护进程脚本 keep.sh
[plain] view plain copy 在CODE上查看代码片派生到我的代码片

###################################################################

File Name: keep.sh

Author: ma6174

mail: ma6174@163.com

Created Time: Fri 16 Jan 2015 07:49:46 PM CST

###################################################################

!/bin/bash

num=1
iNum=1
echo $$
while(( $num < 5 ))
do
sn=ps -ef | grep ./gameserver | grep -v grep |awk '{print $2}'
echo snif[{sn}” = “” ] #如果为空,表示进程未启动
then
let “iNum++”
echo iNum  
cp gameserver.log /mnt/share/log/gameserver_
iNum.log.bak
rm gameserver.log
nohup ./gameserver > gameserver.log 2>&1 & #后台启动进程
echo start ok !
else
echo running
fi
sleep 5
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 的话就没法在后端运行,如果终端关闭,那该脚本对应的进程也被自动杀死掉,守护进程就不存在了

0 0
原创粉丝点击