linux下简单的 程序后台运行、查看、关闭、监控 的shell脚本, 记录一下

centos下,比较通用一点的几个shell脚本记录一下

1. 后台运行:
back_run.sh
运行方式 
sh back_run.sh game_server
会生成一个 xxx.pid文件

exe=$1

nohup ./${exe} 0 0 >> log/${exe}.clog 2>&1 &

echo $! > "${exe}.pid"  # 生成文件,让监控脚本可触发重启判断,暂不处理多开

 

2. 查看运行情况, 查看对应进程的pid
info.sh

 

#!/bin/bash

cur_pwd=`pwd`

function usage()
{
                echo "usage: $0 [server_name>]"
                echo "find pid of server_name which is launched at certain path"
                echo "if [server_name] is no given , find manaserver dbserver gameserver gamegate"
                echo
}
server_name_list=$1
if [[ "$server_name_list" == "" ]]
then
                server_name_list="cross_server http_server global_server list_server"
fi

for server_name in $server_name_list
do
                #pid=`ps -A | grep ${server_name} | cut -d \  -f 1`
                #pid=`ps -A | grep ${server_name} | cut -b1-6`
                real_pids=""
                pids=`ps -C $server_name -o pid=`

                for pid in $pids
                do
                                cwd=`ls -l /proc/${pid}/cwd | cut -d- -f2 | awk '{print $2}'`
                                if [ "$cwd" == "$cur_pwd" ] && [ "$pid" != "" ]; then # 运行目录要和当前目录一致
                                                real_pids="$real_pids $pid"
                                fi
                done
                if [[ "$real_pids" == "" ]]
                then
                                echo "----服务器 $server_name 启动失败-----"
                                # echo "暂不关闭服务器"
                                # exit 1
                                # sh close.sh
                                # echo "服务器启动失败, 已关闭服务器"
                                # exit 1
                fi

                echo "${server_name}${real_pids}"
                echo
done

 

3.关闭 几个进程
close.sh
 

#!/bin/bash
#依次关闭

cur_pwd=`pwd`

function usage()
{
                echo "usage: $0 [server_name>]"
                echo "find pid of server_name which is launched at certain path"
                echo "if [server_name] is no given , find cross_server http_server global_server list_server"
                echo
}

server_name_list=$1
if [[ "$server_name_list" == "" ]]
then
                server_name_list="cross_server global_server list_server http_server"
fi

for server_name in $server_name_list
do
                real_pids=""
                pids=`ps -C $server_name -o pid=`

                for pid in $pids
                do
                                cwd=`ls -l /proc/${pid}/cwd | cut -d- -f2 | awk '{print $2}'`
                                if [ "$cwd" == "$cur_pwd" ] && [ "$pid" != "" ]; then
                                                real_pids="$real_pids $pid"
                                fi
                done
                if [[ "$real_pids" != "" ]]
                then
                    echo "start kill ${server_name}${real_pids}"
                    kill ${real_pids}
                    echo
                fi

                rm -f "${server_name}.pid"  #删除,避免监控脚本又起来了。 暂不处理多开的情况
done

echo ""


4. 监控脚本, 可用crontab定时执行,  发现进程丢失, 调用back_run.sh 启动
check.sh
 

#!/bin/bash
#依次检查

cur_pwd=`pwd`

function usage()
{
                echo "usage: $0 [server_name>]"
                echo "find pid of server_name which is launched at certain path"
                echo "if [server_name] is no given , find cross_server http_server global_server list_server"
                echo
}

server_name_list=$1
if [[ "$server_name_list" == "" ]]
then
                server_name_list="cross_server global_server list_server http_server"
fi

for server_name in $server_name_list
do
                real_pids=""
                pids=`ps -C $server_name -o pid=`

                for pid in $pids
                do
                                cwd=`ls -l /proc/${pid}/cwd | cut -d- -f2 | awk '{print $2}'`
                                if [ "$cwd" == "$cur_pwd" ] && [ "$pid" != "" ]; then
                                                real_pids="$real_pids $pid"
                                fi
                done
                if [[ "$real_pids" == "" ]]
                then
					echo "${server_name} 不存在"
                    if [ -f ${server_name}.pid ];then
                        echo "${server_name}${real_pids} 被关闭, 立即重启"
                        sh back_run.sh ${server_name}
                    fi
                fi
done

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值