shell指令碼監測redis服務自動重啟
阿新 • • 發佈:2020-12-02
服務因意外掛掉,如何保證其自動重啟,繼續提供服務??
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 檔案