在bash / ash中如何构造用于检查cron的逻辑?

问题描述

我正在尝试创建一个脚本,该脚本将比较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,Sun /usr/bin/wifi_schedule.sh stop

但是,如果有多个分支,我不确定该如何处理:

00 09 * * Mon,Sun /usr/bin/wifi_schedule.sh stop
00 15 * * Mon,Sun /usr/bin/wifi_schedule.sh start
00 17 * * Mon,Sun /usr/bin/wifi_schedule.sh stop
00 19 * * Mon,Sun /usr/bin/wifi_schedule.sh start
00 21 * * Mon,Sun /usr/bin/wifi_schedule.sh stop

我尝试使用while,但这似乎只会影响第一个比赛或进入循环。

我要执行的操作是,如果它与cron匹配,则调用启动无线功能。例如,如果设备在cron启动时间之后和cron停止时间之前启动,则启动无线功能;如果设备在cron停止之后启动,则停止无线功能。到目前为止,我尝试过的一些事情是:

获取当前的$day$hour

day=$(date +%a) & hour=$(date +%H)

获得$start的cron $stop$day

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

任何对此的指导将不胜感激,谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)