Я пытаюсь создать скрипт, который будет сравнивать 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
Но если есть несколько 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
, но, похоже, это действует только при первом совпадении или зацикливается.
То, что я пытаюсь сделать, это вызвать функцию запуска беспроводной сети, если она соответствует cron. Например, если устройство загружается после времени запуска cron и до времени остановки cron, запустите беспроводную связь или остановите беспроводную связь, если оно загружается после остановки cron. Некоторые вещи, которые я пробовал до сих пор:
Получить текущие $day
и $hour
day=$(date +%a) & hour=$(date +%H)
Получить cron $start
и $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
Любое руководство с этим будет высоко оценено, спасибо.