服务因意外挂掉,如何保证其自动重启,继续提供服务??
shell通过while-do循环,用ps -ef|grep 检查loader进程是否正在运行,如果没有运行,则启动,这样就保证了崩溃挂掉的进程重新被及时启动。
必须注意两点:
1、ps |grep 一个进程时必须加上其路劲,否则容易grep到错误的结果;
2、必须用 -v 从结果中去除grep命令自身,否则结果非空
[root@tt ~]# ps -ef| grep redis
redis 678 1 0 14:34 ? 00:00:00 /usr/bin/redis-server 127.0.0.1:6378
redis 679 1 0 14:34 ? 00:00:00 /usr/bin/redis-server 127.0.0.1:6379
root 3030 2995 0 14:35 pts/1 00:00:00 grep --color=auto redis
[root@uap ~]# ps -ef| grep "/usr/bin/redis-server 127.0.0.1:6379"| grep -v grep|wc -l
1
1、编写restart_redis.sh:
# ! /bin/sh
while true
do
procnum=`ps -ef| grep "/usr/bin/redis-server 127.0.0.1:6379"| grep -v grep|wc -l`
if [ $procnum -eq 0 ]
then
systemctl restart redis_log
echo `date +%Y-%m-%d` `date +%H:%M:%S` "systemctl restart redis_log" >> /var/log/di/restart_redis_log.log
fi
sleep 10
done
2、启动restart.sh
chmod 644 restart_redis.sh
后台执行 nohup ./restart.sh &
crontab定时监测redis服务
1、编写restart_redis.sh
# ! /bin/sh
procnum=`ps -ef| grep "/usr/bin/redis-server 127.0.0.1:6379"| grep -v grep|wc -l`
if [ $procnum -eq 0 ]
then
sudo systemctl restart redis_log
echo `date +%Y-%m-%d` `date +%H:%M:%S` "systemctl restart redis_log" >>/var/log/restart_redis_log.log
fi
2、启动restart.sh
chmod 644 restart_redis.sh
*/1 * * * * su - ctdi -c /opt/../restart_redis.sh #表示每分钟执行一次 sh 文件