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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
其中,wc -l
显示输入的行数,即找到的进程个数
2. 后台启动monitor.sh并使其daemon化的脚本
#!/bin/sh
mkdir -p logs
nohup ./monitor.sh > logs/monitor.log 2>&1 &
- 1
- 2
- 3
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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20