1. 程式人生 > 資料庫 >shell指令碼監測redis服務自動重啟

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 檔案