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

因爲分佈式系統的流行,服務器上面部署的項目都是多實例的。而我又但願有一個功能,當服務器出現異常狀況可以自動重啓實例。linux

因此我想到了使用shell腳本監控實例進程id,若是不存在的話,就重啓對應的實例。shell

1、輪詢監控實現:服務器

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

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

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

因爲咱們系統使用人數比較少,因此我選擇crontab進行輪詢.net

 

2、環境變量問題:rest

crontab中的環境變量默認不會將咱們自行定義的環境變量載入進來,因此執行腳本的時候,須要執行source命令日誌

source /etc/profile

3、日誌輸出code

對於輪詢失敗的次數和時間須要進行統計,保證可以查詢到,因此咱們要將日誌重定向到一個固定的目錄,定時清理

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

 

4、代碼實例:

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

 

5、其餘

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字節)

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

相關文章
相關標籤/搜索