Linux脚本实现进程监控与重启

Linux脚本实现进程监控与重启

2018年1月14日 大门牙@深圳

总结一下在Device Router服务器开发中使用脚本实现进程监控与自动重启的方法

1. 监控进程的脚本monitor.sh

#!/bin/sh

device_router_cmd_line=./device_router localhost 1883
mosquitto_cmd_line=./mosquitto -d
date

while true;do
    is_device_router_exist=$(ps aux | grep device_router | grep -v grep | wc -l)
    is_mosquitto_exist=$(ps aux | grep mosquitto | grep -v grep | wc -l)

    if [ $is_mosquitto_exist = 0 -a  $is_device_router_exist = 0 ];then
        date
        echo Process mosquitto and device_router are down
        echo Bring mosquitto up
        $mosquitto_cmd_line
        sleep 2
        echo Bring device_router up
        $device_router_cmd_line
    else
        if [ $is_mosquitto_exist = 0 ];then
            date
            echo Process mosquitto is down
            echo Bring mosquitto up
            $mosquitto_cmd_line
        fi
        if [ $is_device_router_exist = 0 ];then
            date
            echo Process device_router down
            echo Bring device_router up
            $device_router_cmd_line
        fi
    fi

    sleep 10

done

其中,wc -l显示输入的行数,即找到的进程个数

2. 后台启动monitor.sh并使其daemon化的脚本

#!/bin/sh
mkdir -p logs
nohup ./monitor.sh > logs/monitor.log  2>&1 &

nohup 使得monitor.sh以后台方式执行,并且不受当前shell关闭的影响

3. 关闭进程的脚本

#!/bin/sh

is_device_router_exist=$(ps aux | grep device_router | grep -v grep | wc -l)
is_mosquitto_exist=$(ps aux | grep mosquitto | grep -v grep | wc -l)
is_monitor_exist=$(ps aux | grep monitor.sh | grep -v grep | wc -l)

if [ $is_monitor_exist = 1 ];then
    echo Kill monitor
    pgrep monitor.sh | xargs kill -9
fi

if [ $is_mosquitto_exist = 1 ];then
    echo Kill mosquitto
    pgrep mosquitto | xargs kill -9
fi

if [ $is_device_router_exist = 1 ];then
    echo Kill device_router
    pgrep device_router | xargs kill -9
fi

热烈欢迎批评指正!!!

经验分享 程序员 微信小程序 职场和发展