test-rollBack

#Version=V1.1_20200706
#!/bin/sh
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/APP/Libraries/GeneralLibs/xdja/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/APP/Libraries/GeneralLibs/libevent
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/APP/Libraries/GeneralLibs/mqtt
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/APP/Libraries/GeneralLibs/libsqlite3
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/APP/Libraries/GeneralLibs/openssl
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/APP/Libraries/MsgAdapterLibs
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/APP/Libraries/RSULibs

TryTime_mama=0 #重啓次數記錄
TryTime_ChildV2X=0 #重啓次數記錄
TryTime_ChildGNSS=0 #重啓次數記錄
TryTime_ChildLed=0 #重啓次數記錄
TryTime_ChildSupervision=0 #重啓次數記錄
psMonitCount_ChildV2X=0 #ps監控進程次數
psMonitCount_ChildGNSS=0 #ps監控進程次數
psMonitCount_ChildLed=0 #ps監控進程次數
psMonitCount_mama=0 #ps監控進程次數
psMonitCount_ChildSupervision=0 #ps監控進程次數
monitor_app_mama="mama"
monitor_app_ChildV2X="ChildV2X"
monitor_app_ChildGNSS="ChildGNSS"
#monitor_app_ChildGNSS="v2xrsu"
monitor_app_ChildLed="ChildLed"
monitor_app_ChildSupervision="ChildSupervision"
#monitor_app="V2X_APP_LTEV_TEST1" #需要監聽的APP
#monitor_app1="V2X_APP_LTEV_TEST2" #需要監聽的APP
restartFlag_mama=0 #重啓標誌
restartFlag_ChildV2X=0 #重啓標誌
restartFlag_ChildGNSS=0 #重啓標誌
restartFlag_ChildLed=0 #重啓標誌
restartFlag_ChildSupervision=0 #重啓標誌
SysTime=`date "+%Y-%m-%d %H:%M:%S"` #獲取系統時間
timeStamp=`date -d "$SysTime" +%s` #獲取UTC時間戳
timeStamp=$(expr $timeStamp + 3600) #程序初次啓動比較時間 當前時間加一小時
l_timeStamp=0
App_path="/mnt/APP/V2XAPP/" #APP具體路徑,用於重啓使用
App_Old_path="/mnt/APP/V2XAPP_BK/" #上個版本程序保存路徑
Errorlog_Path="/mnt/RWD/RollbackLog/rollError.log" #錯誤日誌路徑
Max_Count=0+1+1 #最大重啓次數,到達後還未啓動成功則進行回滾
Re_intervarl=2 #檢測時間間隔
wait_time=2 #啓動APP後,等待APP啓動的額外等待時間,實際等待時間爲wait_time+Re_intervarl
#判斷是否存在log文件不存在則創建
if [ ! -f "$Errorlog_Path" ];then
touch $Errorlog_Path
fi
#判斷程序正常運行60分鐘 將此程序複製到備份目錄下
FunStaProCopy()
{
SysTime=`date "+%Y-%m-%d %H:%M:%S"`
l_timeStamp=`date -d "$SysTime" +%s`
if [ $l_timeStamp -gt $timeStamp ];then #到達一小時時間
timeStamp=`date -d "$SysTime" +%s`
timeStamp=$(expr $timeStamp + 3600)
if [ $restartFlag_mama = 0 ];then #判斷mama進程是否有重啓行爲
SysHtime=$l_SysHtime
cd $Apppath
cp $Apppath$monitor_app_mama $App_Old_path #將穩定程序拷貝到回滾目錄
restartFlag_mama=0
#echo "save backup program mama $SysTime" >>$Errorlog_Path
else
restartFlag_mama=0
echo " Time is up flag error clear flag mama $SysTime" >>$Errorlog_Path
fi

if [ $restartFlag_ChildV2X = 0 ];then #判斷ChildV2X進程是否有重啓行爲
SysHtime=$l_SysHtime
cd $Apppath
cp $Apppath$monitor_app_ChildV2X $App_Old_path #將穩定程序拷貝到回滾目錄
restartFlag_ChildV2X=0
#echo "save backup program ChildV2X $SysTime" >>$Errorlog_Path
else
restartFlag_ChildV2X=0
echo " Time is up flag error clear flag ChildV2X $SysTime" >>$Errorlog_Path
fi

if [ $restartFlag_ChildGNSS = 0 ];then #判斷ChildGNSS進程是否有重啓行爲
SysHtime=$l_SysHtime
cd $Apppath
cp $Apppath$monitor_app_ChildGNSS $App_Old_path #將穩定程序拷貝到回滾目錄
restartFlag_ChildGNSS=0
#echo "save backup program ChildGNSS $SysTime" >>$Errorlog_Path
else
restartFlag_ChildGNSS=0
echo " Time is up flag error clear flag ChildGNSS $SysTime" >>$Errorlog_Path
fi

if [ $restartFlag_ChildLed = 0 ];then #判斷ChildLed進程是否有重啓行爲
SysHtime=$l_SysHtime
cd $Apppath
cp $Apppath$monitor_app_ChildLed $App_Old_path #將穩定程序拷貝到回滾目錄
restartFlag_ChildLed=0
#echo "save backup program ChildLed $SysTime" >>$Errorlog_Path
else
restartFlag_ChildLed=0
echo " Time is up flag error clear flag ChildLed $SysTime" >>$Errorlog_Path
fi

if [ $restartFlag_ChildSupervision = 0 ];then #判斷ChildSupervision進程是否有重啓行爲
SysHtime=$l_SysHtime
cd $Apppath
cp $Apppath$monitor_app_ChildSupervision? $App_Old_path #將穩定程序拷貝到回滾目錄
restartFlag_ChildSupervision=0
#echo "save backup program ChildSupervision $SysTime" >>$Errorlog_Path
else
restartFlag_ChildSupervision=0
echo " Time is up flag error clear flag ChildSupervision $SysTime" >>$Errorlog_Path
fi

fi
}
FunRollProcess_mama()
{
AppName=$1 #外部傳入參數 進程名
Apppath=$2 #外部傳入參數 進程運行路徑
AppNameOld=$3 #外部傳入參數 備份目錄文件名
pid_TimeSys=$(ps |grep $AppName|grep -v "grep"|awk '{print $1}') #獲取進程ID
if [ "$pid_TimeSys" = "" ];then #判斷進程是否正在運行 如未運行進行次數加一
psMonitCount_mama=`expr $psMonitCount_mama+1`
else
psMonitCount_mama=0
TryTime_mama=0
fi
if [ "$psMonitCount_mama" = "$Max_Count" ];then #通過兩次判斷進程運行狀態 判斷當前進程是否運行
pid_TimeSyskill=$(ps |grep ChildLed|grep -v "grep"|awk '{print $1}') #獲取進程ID
if [ "$pid_TimeSyskill" = "" ];then #判斷進程是否正在運行 如未運行進行次數加一
echo "dont find ChildLed">>$Errorlog_Path
else
echo "kill the Led $pid_TimeSyskill">>$Errorlog_Path
kill $pid_TimeSyskill
fi
pid_TimeSyskill=$(ps |grep ChildGNSS|grep -v "grep"|awk '{print $1}') #獲取進程ID
if [ "$pid_TimeSyskill" = "" ];then #判斷進程是否正在運行 如未運行進行次數加一
echo "dont find ChildGNSS">>$Errorlog_Path
else
echo "kill the GNSS $pid_TimeSyskill">>$Errorlog_Path
kill $pid_TimeSyskill
fi
pid_TimeSyskill=$(ps |grep ChildV2X|grep -v "grep"|awk '{print $1}') #獲取進程ID
if [ "$pid_TimeSyskill" = "" ];then #判斷進程是否正在運行 如未運行進行次數加一
echo "dont find ChildV2X">>$Errorlog_Path
else
echo "kill the V2X $pid_TimeSyskill">>$Errorlog_Path
kill $pid_TimeSyskill
fi
pid_TimeSyskill=$(ps |grep ChildSupervisio|grep -v "grep"|awk '{print $1}') #獲取進程ID
if [ "$pid_TimeSyskill" = "" ];then #判斷進程是否正在運行 如未運行進行次數加一
echo "dont find ChildSupervisio">>$Errorlog_Path
else
echo "kill the Supervisio $pid_TimeSyskill">>$Errorlog_Path
kill $pid_TimeSyskill
fi
psMonitCount_mama=0
if [ "$TryTime_mama" = "$Max_Count" ];then #重啓次數是否達到上限
cd $App_Old_path
cp $AppOldPath$AppNameOld $Apppath 2>>$Errorlog_Path #old程序從回滾目錄下複製到正常目錄
cd $Apppath
mv $AppNameOld $AppName

chmod 777 $AppName
./$AppName & 2>>$Errorlog_Path
TryTime_mama=0
SysTime=`date "+%Y-%m-%d %H:%M:%S"`
echo "Start Old Version $AppName $SysTime...." >>$Errorlog_Path
sleep $wait_time
else
cd $Apppath #沒有達到重啓上限值,繼續重啓最新程序
./$AppName &2>>$Errorlog_Path
TryTime_mama=`expr $TryTime_mama+1`
restartFlag_mama=1
SysTime=`date "+%Y-%m-%d %H:%M:%S"`
echo "Start $AppName $SysTime...." >>$Errorlog_Path
fi
fi
}

FunRollProcess_ChildV2X()
{
AppName=$1 #外部傳入參數 進程名
Apppath=$2 #外部傳入參數 進程運行路徑
AppNameOld=$3 #外部傳入參數 備份目錄文件名
pid_TimeSys=$(ps|grep $AppName|grep -v "grep"|awk '{print $1}') #獲取進程ID
if [ "$pid_TimeSys" = "" ];then
psMonitCount_ChildV2X=`expr $psMonitCount_ChildV2X+1`
else
TryTime_ChildV2X=0
fi
if [ "$psMonitCount_ChildV2X" = "$Max_Count" ];then #判斷當前進程是否運行
psMonitCount_ChildV2X=0
if [ "$TryTime_ChildV2X" = "$Max_Count" ];then #重啓次數是否達到上限
cd $App_Old_path
cp $AppOldPath$AppNameOld $Apppath 2>>$Errorlog_Path #old程序從回滾目錄下複製到正常目錄
cd $Apppath
mv $AppNameOld $AppName
chmod 777 $AppName
./$AppName & 2>>$Errorlog_Path
TryTime_ChildV2X=0
SysTime=`date "+%Y-%m-%d %H:%M:%S"`
echo "Start Old Version $AppName $SysTime...." >>$Errorlog_Path
sleep $wait_time
else
cd $Apppath #沒有達到重啓上限值,繼續重啓最新程序
echo "appname $AppName"
./$AppName &2>>$Errorlog_Path
TryTime_ChildV2X=`expr $TryTime_ChildV2X+1`
restartFlag_ChildV2X=1
SysTime=`date "+%Y-%m-%d %H:%M:%S"`
echo "Start $AppName $SysTime...." >>$Errorlog_Path
fi
fi
}
FunRollProcess_ChildGNSS()
{
AppName=$1 #外部傳入參數 進程名
Apppath=$2 #外部傳入參數 進程運行路徑
AppNameOld=$3 #外部傳入參數 備份目錄文件名
pid_TimeSys=$(ps|grep $AppName|grep -v "grep"|awk '{print $1}') #獲取進程ID
if [ "$pid_TimeSys" = "" ];then
psMonitCount_ChildGNSS=`expr $psMonitCount_ChildGNSS+1`
else
TryTime_ChildGNSS=0
fi
if [ "$psMonitCount_ChildGNSS" = "$Max_Count" ];then #判斷當前進程是否運行
psMonitCount_ChildGNSS=0
if [ "$TryTime_ChildGNSS" = "$Max_Count" ];then #重啓次數是否達到上限
cd $App_Old_path
cp $AppOldPath$AppNameOld $Apppath 2>>$Errorlog_Path #old程序從回滾目錄下複製到正常目錄
cd $Apppath
mv $AppNameOld $AppName
chmod 777 $AppName
./$AppName & 2>>$Errorlog_Path
TryTime_ChildGNSS=0
SysTime=`date "+%Y-%m-%d %H:%M:%S"`
echo "Start Old Version $AppName $SysTime...." >>$Errorlog_Path
sleep $wait_time
else
cd $Apppath #沒有達到重啓上限值,繼續重啓最新程序
echo "appname $AppName"
./$AppName &2>>$Errorlog_Path
TryTime_ChildGNSS=`expr $TryTime_ChildGNSS+1`
restartFlag_ChildGNSS=1
SysTime=`date "+%Y-%m-%d %H:%M:%S"`
echo "Start $AppName $SysTime...." >>$Errorlog_Path
fi
fi
}
FunRollProcess_ChildLed()
{
AppName=$1 #外部傳入參數 進程名
Apppath=$2 #外部傳入參數 進程運行路徑
AppNameOld=$3 #外部傳入參數 備份目錄文件名
pid_TimeSys=$(ps|grep $AppName|grep -v "grep"|awk '{print $1}') #獲取進程ID
if [ "$pid_TimeSys" = "" ];then
psMonitCount_ChildLed=`expr $psMonitCount_ChildLed+1`
else
TryTime_ChildLed=0
fi
if [ "$psMonitCount_ChildLed" = "$Max_Count" ];then #判斷當前進程是否運行
psMonitCount_ChildLed=0
if [ "$TryTime_ChildLed" = "$Max_Count" ];then #重啓次數是否達到上限
cd $App_Old_path
cp $AppOldPath$AppNameOld $Apppath 2>>$Errorlog_Path #old程序從回滾目錄下複製到正常目錄
cd $Apppath
mv $AppNameOld $AppName
chmod 777 $AppName
./$AppName & 2>>$Errorlog_Path
TryTime_ChildLed=0
SysTime=`date "+%Y-%m-%d %H:%M:%S"`
echo "Start Old Version $AppName $SysTime...." >>$Errorlog_Path
sleep $wait_time
else
cd $Apppath #沒有達到重啓上限值,繼續重啓最新程序
echo "appname $AppName"
./$AppName &2>>$Errorlog_Path
TryTime_ChildLed=`expr $TryTime_ChildLed+1`
restartFlag_ChildLed=1
SysTime=`date "+%Y-%m-%d %H:%M:%S"`
echo "Start $AppName $SysTime...." >>$Errorlog_Path
fi
fi
}
FunRollProcess_ChildSupervision()
{
AppName=$1 #外部傳入參數 進程名
Apppath=$2 #外部傳入參數 進程運行路徑
AppNameOld=$3 #外部傳入參數 備份目錄文件名
pid_TimeSys=$(ps|grep ChildSupervisio |grep -v "grep"|awk '{print $1}') #獲取進程ID
if [ "$pid_TimeSys" = "" ];then
psMonitCount_ChildSupervision=`expr $psMonitCount_ChildSupervision+1`
else
TryTime_ChildSupervision=0
fi
if [ "$psMonitCount_ChildSupervision" = "$Max_Count" ];then #判斷當前進程是否運行
psMonitCount_ChildSupervision=0
if [ "$TryTime_ChildSupervision" = "$Max_Count" ];then #重啓次數是否達到上限
cd $App_Old_path
cp $AppOldPath$AppNameOld $Apppath 2>>$Errorlog_Path #old程序從回滾目錄下複製到正常目錄
cd $Apppath
mv $AppNameOld $AppName
chmod 777 $AppName
./$AppName? & 2>>$Errorlog_Path
TryTime_ChildSupervision=0
SysTime=`date "+%Y-%m-%d %H:%M:%S"`
echo "Start Old Version $AppName $SysTime...." >>$Errorlog_Path
sleep $wait_time
else
cd $Apppath #沒有達到重啓上限值,繼續重啓最新程序
echo "appname $AppName"
./$AppName &2>>$Errorlog_Path
TryTime_ChildSupervision=`expr $TryTime_ChildSupervision+1`
restartFlag_ChildSupervision=1
SysTime=`date "+%Y-%m-%d %H:%M:%S"`
echo "Start $AppName $SysTime...." >>$Errorlog_Path
fi
fi
}

while :
do
#監控進程函數
FunRollProcess_ChildGNSS $monitor_app_ChildGNSS $App_path $monitor_app_ChildGNSS
FunRollProcess_ChildLed $monitor_app_ChildLed $App_path $monitor_app_ChildLed
FunRollProcess_ChildSupervision $monitor_app_ChildSupervision $App_path $monitor_app_ChildSupervision
FunRollProcess_ChildV2X $monitor_app_ChildV2X $App_path $monitor_app_ChildV2X
FunRollProcess_mama $monitor_app_mama $App_path $monitor_app_mama
#進程備份程序
FunStaProCopy
#echo "APPRollback is running $SysTime...." >>$Errorlog_Path
sleep $Re_intervarl
done

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