【发布时间】:2021-01-22 01:51:44
【问题描述】:
我正在尝试创建一个脚本来比较 cron,如果当前日期/时间在 cron 开始/停止时间之内,则执行一个函数。如果启动/停止只有一个 cron 条目,这将很简单,但我不知道如何允许多个 cron。我正在使用 posix/ash 但如果有人可以提供一个 bash 示例,希望我能适应它。我只是不明白如何构建逻辑?
例如:如果 cron 是这样,那将是一个简单的if 语句:
00 09 * * Mon,Tue,Wed,Thu,Fri,Sat,Sun /usr/bin/wifi_schedule.sh start
00 11 * * Mon,Tue,Wed,Thu,Fri,Sat,Sun /usr/bin/wifi_schedule.sh stop
但是如果有多个 crons,我不确定如何处理:
00 09 * * Mon,Tue,Wed,Thu,Fri,Sat,Sun /usr/bin/wifi_schedule.sh start
00 11 * * Mon,Tue,Wed,Thu,Fri,Sat,Sun /usr/bin/wifi_schedule.sh stop
00 15 * * Mon,Tue,Wed,Thu,Fri,Sat,Sun /usr/bin/wifi_schedule.sh start
00 17 * * Mon,Tue,Wed,Thu,Fri,Sat,Sun /usr/bin/wifi_schedule.sh stop
00 19 * * Mon,Tue,Wed,Thu,Fri,Sat,Sun /usr/bin/wifi_schedule.sh start
00 21 * * Mon,Tue,Wed,Thu,Fri,Sat,Sun /usr/bin/wifi_schedule.sh stop
我尝试过使用while,但这似乎只对第一个匹配项起作用或进入循环。
如果它与 cron 匹配,我正在尝试做的是调用启动无线功能。例如,如果设备在 cron 启动时间之后和 cron 停止时间之前启动,则启动无线,或者如果它在 cron 停止之后启动,则停止无线。到目前为止我尝试过的一些事情是:
获取当前的$day 和$hour
day=$(date +%a) & hour=$(date +%H)
为$day 获取 cron $start 和 $stop 时间
start=$(grep $day /etc/crontabs/root | awk '/start/ {print $2}')
stop=$(grep $day /etc/crontabs/root | awk '/stop/ {print $2}')
计算发生了多少次开始/停止时间(例如$count=3)
count=$(echo "$start" | wc -l)
为启动/停止创建变量
set -- $start
set -- $stop
从$count=3 确定变量(例如 -- $3、$2、$1)
var=$(eval echo \$$count)
我使用while的失败示例:
while [ $var -le $hour ];
do
if [ $hour -ge $var ]; then
echo "do something"
else
var=$(eval echo \$$count)
count=$(( $count - 1 ))
echo "do something else"
fi
done
exit
任何有关这方面的指导将不胜感激,谢谢。
【问题讨论】: