Linux下服務的監控重啓

1. 假如目前在 /data/app目錄下有一個boot.jar 包,有啓動腳本 start.sh ,停止腳本 stop.sh ,重啓腳本 restart.sh,以及健康重啓腳本 re.sh

2. 內容分別爲:

start.sh

keyword="boot.jar"
nohup java -Xms128m -Xmx512m -jar /data/deploy/$keyword >./output.log 2>&1  &

stop.sh

keyword="boot.jar"
ps -ef|grep $keyword |grep -v "grep" |awk '{cmd="kill "$2;system(cmd)}'

restart.sh

sh ./stop.sh
sh ./start.sh

re.sh

#!/bin/sh
file_name="/data/deploy/restart.log"  #重啓腳本日誌需要賦予讀寫權限
pid=0
proc_num() 
{
    num=`ps -ef | grep 服務的jar包 | grep -v grep | wc -l` 
    return $num 
}
proc_id()
{  
    pid=`ps -ef | grep 服務的jar包 | grep -v grep | awk '{print $2}'` 
} 
proc_num  #獲取進程數
number=$?  #獲取返回值
if [ $number -eq 0 ]  #沒有該進程,則重啓
then
    sh /data/deploy/start.sh  # 重啓程序
    proc_id 
    echo ${pid}, `date` >> $file_name  #把重啓的進程號、時間 寫入日誌
else
echo "runing......", `date` >> $file_name  #如果有該進程,在日誌中顯示正在running
fi

或者替代腳本:

#! /bin/sh

host_dir=`echo ~`          # 當前用戶根目錄
proc_name="/data/deploy/boot.jar"        # 進程名
file_name="/data/deploy/bindmonitor.log"       # 日誌文件
pid=0

proc_num()            # 計算進程數
{
 num=`ps -ef | grep $proc_name | grep -v grep | wc -l`
 return $num
}

proc_id()            # 進程號
{
 pid=`ps -ef | grep $proc_name | grep -v grep | awk '{print $2}'`
}

proc_num
number=$?
if [ $number -eq 0 ]         # 判斷進程是否存在
then 
 sh /dat/deploy/xx/start.sh
              # 重啓進程的命令,請相應修改
 proc_id           # 獲取新進程號
 echo ${pid}, `date` >> $file_name  # 將新進程號和重啓時間記錄
fi

3. 定時器

使用crontab定期每30分鐘調用一次監控腳本
crontab -e
加入一行

* /30* * * * sh /data/deploy/re.sh 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章