shell指令碼監測redis服務自動重啟

2021-10-10 19:43:22 字數 1688 閱讀 4995

服務因意外掛程式掉,如何保證其自動重啟,繼續提供服務??

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

fisleep 10

done

2、啟動restart.sh 

chmod 644 restart_redis.sh

後台執行 nohup ./restart.sh &

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

shell指令碼redis操作

指令碼分2部,redis查詢出所需要的key,然後遍歷key查詢出所有的value追加到檔案中 想法 本來是要迴圈遍歷滿足條件key的結果集的,但是失敗了,所有就直接儲存到檔案中,讀取檔案每一行的結果,用這個結果查詢value儲存到新檔案中 進一步優化 因為key的type不同的原因,所有其實可以選...

shell指令碼實現堆疊(模擬合服)

shell用陣列模擬乙個棧,每次彈出來棧頂的最上面兩個元素,進行合服。bin bash test array and stack maxtop 5 堆疊所能存放元素的最大值 declare top 0 定義棧頂指標,初始值為0 temp 定義乙個臨時全域性變數,存放出棧元素,初始值為空 declar...

管理Redis程序的Shell指令碼

下面是乙個 shell 指令碼,用於管理 redis 程序 啟動,停止,重啟 這個指令碼可供參考。bin sh redis this script starts and stops the redis server daemon chkconfig 85 15 description redis i...