test-rollBack

标签:拷贝   run   monitor   openssl   chm   ack   最新   监控   chmod   

#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

test-rollBack

标签:拷贝   run   monitor   openssl   chm   ack   最新   监控   chmod   

原文地址:https://www.cnblogs.com/d-h-/p/14291142.html

版权声明:完美者 发表于 2021-01-19 11:47:18。
转载请注明:test-rollBack | 完美导航

暂无评论

暂无评论...