【運維技術】shell腳本實現線程掛掉,自動重啟功能


由於分布式系統的流行,服務器上面部署的項目都是多實例的。而我又希望有一個功能,當服務器出現異常情況能夠自動重啟實例。

所以我想到了使用shell腳本監控實例進程id,如果不存在的話,就重啟對應的實例。

一、輪詢監控實現:

1. 使用crontab,缺點一分鍾輪詢一次

2. 使用shell死循環進行輪詢

參考:https://blog.csdn.net/u011261430/article/details/72921991

由於我們系統使用人數比較少,所以我選擇crontab進行輪詢

 

二、環境變量問題:

crontab中的環境變量默認不會將我們自行定義的環境變量載入進來,所以執行腳本的時候,需要執行source命令

source /etc/profile

三、日志輸出

對於輪詢失敗的次數和時間需要進行統計,保證能夠查詢到,所以我們要將日志重定向到一個固定的目錄,定時清理

*/1 * * * * /app/crontab/monitor.sh >> /app/crontab/kafka.log

 

四、代碼實例:

crontab -e:將對應日志寫入到文件中,方便后期查詢失敗的情況

*/1 * * * * /app/crontab/monitor.sh >> /app/crontab/kafka.log

文件目錄結構:

├── app
│   ├── crontab
│        ├── kafka.log
│        ├── monitor.sh

monitor.sh

記得必須先賦權

chmod 777 monitor.sh

具體代碼

#!/bin/sh
# 默認shell執行需要的內容

# 環境變量重新生效 source
/etc/profile

# 判斷進程是否存在,記得使用grep -v 排除gerp進程 retDesc
=`ps -ef | grep "kafka.Kafka /app/kafka/config/server.properties" | grep -v grep` retCode=$? # 判斷是否不為0,不為0就重新啟動服務器,為0就說明服務器存在
if [ ${retCode} -ne 0 ]; then # invoke aliyun mobile push sms echo $(date +%F%n%T) echo "server down restart..." /app/kafka/bin/kafka-server-start.sh -daemon /app/kafka/config/server.properties >> /dev/null 2>&1 else echo "server on" fi

 

五、其他

linux中如果需要顯示樹形目錄結構,安裝tree庫即可

cron日志:tailf /var/log/cron

linux中的標准輸入和輸出,也就是控制台的輸入和輸出:https://blog.csdn.net/cjfeii/article/details/10084343

linux中有一個輸入時空設備/dev/null 輸出到這邊的東西是不會占用內存的 > 新文件 >> 附加 2>&1 程序輸出和錯誤輸出都走這個輸出

賦權命令:chmod 777 *.sh

linux快熟清空文件的三種方法:

echo "" > test.txt(文件大小被截為1字節)
> test.txt(文件大小被截為0字節)
cat/dev/null > test.txt(文件大小被截為0字節)

路徑問題:最好腳本中都使用全路徑,避免路徑引發的問題。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM