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