small-packages/luci-app-timedreboot/root/usr/bin/dorboot
2026-05-13 01:55:45 +08:00

131 lines
2.7 KiB
Bash

#!/bin/bash
# [K] (C)2020
# http://github.com/kongfl888/luci-app-timedreboot
sleep 5s
if [ ! -e "/etc/config/timedreboot" ]; then
echo "timedreboot cfg is not exit" >> /tmp/timedreboot.log
logger "timedreboot cfg is not exit. Stop!"
exit 1
fi
renable=1
# --------function--------
get_cfg_value(){
v=`uci get timedreboot.@main[0].$1 2>/dev/null`
if [ ! -z "$v" ]; then
echo "$v"
else
echo "1"
fi
}
get_cron_timestr() {
str1=`cat /etc/crontabs/root | grep "dorboot"`
m1=`echo "$str1" | cut -d " " -f 1`
h2=`echo "$str1" | cut -d " " -f 2`
w5=`echo "$str1" | cut -d " " -f 5`
echo "$m1 $h2 * * $w5"
}
get_cron_parameter() {
str=`cat /etc/crontabs/root | grep "dorboot" | cut -d " " -f 7`
echo "$str"
}
clear_cron(){
sed -i '/dorboot/d' /etc/crontabs/root >/dev/null 2>&1
/etc/init.d/cron restart
}
set_cron() {
echo "Timed Reboot is set." > /tmp/timedreboot.log
clear_cron
echo "${1} /usr/bin/dorboot ${2}" >> /etc/crontabs/root
}
rebootsys() {
if [ "${1}" = "1" ]; then
uci set timedreboot.@main[0].enable="0"
uci set timedreboot.@main[0].once="0"
uci commit timedreboot
clear_cron
fi
sleep 5s
touch /etc/banner
sleep 5s
reboot
}
justcfg() {
local minute=`get_cfg_value "minute"`
local hour=`get_cfg_value "hour"`
local week=`get_cfg_value "week"`
local sday=`get_cfg_value "sday"`
local once=`get_cfg_value "once"`
if [ $minute = 0 ] ; then
minute="00"
fi
if [ $week != 8 ] ; then
sday="*"
else
sday=`echo $sday | grep -owE "^[0-9]+\-[0-9]+|^[0-9]+(,[0-9]+)*"`
[ -z $sday ] && sday=15
fi
if [ $week -gt 6 ] ; then
week="*"
fi
renable=`get_cfg_value "enable"`
param=`get_cron_parameter`
cfgstr="$minute $hour $sday * $week"
cronstr=`get_cron_timestr`
if [ "$renable" == "0" ]; then
clear_cron
echo "Timed Reboot has been cleared." > /tmp/timedreboot.log
elif [ "$cfgstr" == "$cronstr" ]; then
if [ -z "$param" ]; then
echo "1"
set_cron "$cfgstr" "$once"
elif [ "$param" != "$once" ]; then
echo "2"
set_cron "$cfgstr" "$once"
else
echo "3"
echo "Timed Reboot is set." > /tmp/timedreboot.log
exit 0
fi
else
echo "4"
set_cron "$cfgstr" "$once"
fi
}
# ------------main-------------
renable=`get_cfg_value "enable"`
if [ "$renable" != "0" ]; then
/etc/init.d/timedreboot enable
fi
if [ "${1}" = "0" -o "${1}" = "1" ]; then
rebootsys
else
justcfg
sleep 10s
justcfg
fi
exit 0