shell脚本监测redis服务自动重启

服务因意外挂掉,如何保证其自动重启,继续提供服务??

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 文件

 

你可能感兴趣的:(linux,redis,shell,redis宕机自启动)