我正在尝试创建一个脚本来比较cron,如果当前日期/时间在cron启动/停止时间内,则执行一个函数。如果只有一个cron条目用于start/stop,这将很简单,但是我不知道如何允许多个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但是如果有多个cron,我不确定如何处理:
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,但这似乎只在第一次匹配时起作用,否则就会进入循环。
我尝试做的是调用start wireless函数,如果它与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任何关于这方面的指导都将不胜感激,谢谢。
发布于 2020-10-07 15:00:09
在我看来,解析crontab以确定作业是否应该运行是根本错误的。如果有另一个crontab运行相同的脚本集怎么办?如果脚本是手动运行的,该怎么办?如果将cron-logic切换到systemd.timers会怎么样
看起来你真正想做的是检查系统是否处于给定的状态(例如"WiFi已打开“,甚至"WiFi应已打开”)。
因此,您真正应该做的是尝试找出系统是否处于请求的状态。
它可以像在cron执行的脚本中设置一个标志一样简单。
例如,您的wifi_schedule.sh脚本(您确实应该将其放入/usr/local/bin/中,因为/usr/bin是为系统保留的):
#!/bin/sh
case "$1" in
start)
echo 1 > /var/run/wifi_schedule
;;
stop)
echo 0 > /var/run/wifi_schedule
;;
esac
# here comes the actual script:
# ...如果手头的实际任务更复杂,您可以考虑从cron切换到systemd.unit (显然,只有在您可以接受systemd的情况下),它允许您表达时间、执行顺序和各个部分之间的依赖关系。
https://stackoverflow.com/questions/64238411
复制相似问题