我写过的脚本(定时重启设备)

设置星期几的某个时刻重启系统,配置文件JtRestartCronTab的格式和crontab的一样,like


#minute   hour   day   month   week   command


#!/bin/bash


StartTime=`date +'%Y-%m-%d %H:%M:%S'`
echo "New Start Run at $StartTime --------------------------------------------"


#如果没有配置文件JtRestartCronTab,判定为不重启,退出
if [ ! -f JtRestartCronTab ]; then
echo "no JtRestartCronTab file, exit"
exit 0
fi


#一天的秒数
OneDaySecond=86400
#半天的秒数
HalfDaySecond=43200


#先睡一天的时间,让系统至少能跑一天
echo "sleep $HalfDaySecond, about half day"
sleep $HalfDaySecond




#minute   hour   day   month   week   command


#解读配置文件
Cmd=`awk 'NR==1 {print $0}' JtRestartCronTab`
Minute=`awk 'NR==1 {print $1}' JtRestartCronTab`
Hour=`awk 'NR==1 {print $2}' JtRestartCronTab`
WeekS=`awk 'NR==1 {print $5}' JtRestartCronTab`


#当前的时间
NowDate=`date +'%Y-%m-%d %H:%M:%S'`
NowHour=`date +%H`
NowMinute=`date +%M`
NowWeek=`date +%w`


echo "minute   hour   day   month   week   command"
echo "Cmd $Cmd"
echo "WeekS $WeekS"
echo "Hour $Hour, Minute $Minute"
echo "NowHour $NowHour, NowMinute $NowMinute, NowWeek $NowWeek"


#当前的时间换算为秒数
NowTime=`expr $NowHour \* 60 \* 60 + $NowMinute \* 60`
#把要重启的时间换算为秒数
Time=`expr $Hour \* 60 \* 60 + $Minute \* 60`

注意这里的运算符和变量之间必须有空格,要不然会认为是一个字符串



echo "NowTime $NowTime, Time $Time, NowDate $NowDate"


# *号表示没有设置星期,退出
if [ "$WeekS" = "*" ]; then
echo "no week, exit"
exit 0
fi


#如果有多个星期,他的格式为 0,1,2,3,4 这里把,号换为空格,方便下面的while循环一个一个的提取
# ${WeekS//,/ } 表示把 WeekS的,号都换为空格,//表示替换所有,如果这样${WeekS/,/ }就只会替换遇到的第一个
WeekS=${WeekS//,/ }
echo $WeekS


#由date +%w得到的星期天的值是0, 7表示非法值
ExpectWeek=7


# 要求重启的星期可能由多个,找到最近的那一个
for Week in $WeekS
do
if [ $Week -eq $NowWeek ]; then
#是需要的重启的那个星期值
echo "Week $Week equal NowWeek $NowWeek, compare time"
# 大于等于
if [ $Time -ge $NowTime ]; then
ExpectWeek=$Week
echo "Week $Week equal NowWeek $NowWeek, Time $Time greate NowTime $NowTime , break"
break
fi
echo "Week $Week equal NowWeek $NowWeek, Time $Time little NowTime $NowTime , continue"
elif [ $Week -gt $NowWeek ]; then
#还未到要重启的那个星期值
echo "Week $Week greate NowWeek $NowWeek, use this"
ExpectWeek=$Week
break
else
#已经过了要重启的那个星期值
echo "Week $Week little NowWeek $NowWeek, continue"
fi
done


#因为不是*,说明肯定有要重启的星期,但是没有找到,说明是星期X到星期0的情况
if [ $ExpectWeek -eq 7 ]; then
echo "ExpectWeek is 7, set to 0"
ExpectWeek=0
fi


echo "reboot at week $ExpectWeek, Hour $Hour, Minute $Minute"


while ((1)); do
{
#当前的星期和时间
NowWeek=`date +%w`
NowHour=`date +%H`
NowMinute=`date +%M`
if [ $NowWeek -ne $ExpectWeek ]; then
#现在是要重启的那一天,睡
SleepTime=`expr $OneDaySecond - $NowHour \* 60 \* 60 - $NowMinute \* 60`
SleepTime=${SleepTime#-}      //去掉第一个"-"
echo "week $NowWeek is not expect week $ExpectWeek, sleep $SleepTime"
sleep $SleepTime
else
#不是那一天,睡到0点整
NowHour=`date +%H`
NowMinute=`date +%M`
SleepTime=`expr $NowHour \* 60 \* 60 + $NowMinute \* 60 - $Hour \* 60 \* 60 - $Minute \* 60 + 5`
SleepTime=${SleepTime#-}
echo "week $NowWeek is expect week $ExpectWeek, sleep $SleepTime, then reboot"
sleep $SleepTime


NowDate=`date +'%Y-%m-%d %H:%M:%S'`
echo "time is up, start reboot, NowDate $NowDate !!!!!!"

kill -9 $(lsof -i:30000 | sed -n '2p' | awk '{print $2}')
sleep 5


killall DecoderProcess
sleep 5


killall X
sleep 5


killall X
sleep 5


kill -9 $(lsof -i:20000 | sed -n '2p' | awk '{print $2}')


cd /home/nvrapp
./clear_process.sh
cd -


reboot

exit 0
fi
}
done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值