Иногда cron не подходит:
📍 нужно запустить задачу в определенное время суток,
📍 но не строго по расписанию, а если есть что обрабатывать,
📍 и не запускать ее днем, когда сервер под нагрузкой.
Тут пригодится встроенная проверка временных окон в скрипте, а cron пусть просто каждые 10 минут запускает "умный планировщик".
🛠 Пример: выполнение задачи только с 02:00 до 05:00 по будням
#!/bin/bash
#настройки временного окна
start_hour=2
end_hour=5
# день недели (1..5 = пн-пт)
dow=$(date +%u)
#часы сейчас
hour=$(date +%H)
#проверка: будний день и нужное время
if (( dow >= 1 && dow <= 5 )) && (( hour >= start_hour && hour < end_hour )); then
echo "[$(date)] Временное окно открыто. Выполняем задачу."
#здесь реальная задача:
/opt/backup/backup-db.sh
else
echo "[$(date)] Вне временного окна. Пропуск."
fi
▪️ Расширение: исключение праздников (по файлу)
holiday_file="/etc/holidays.txt"
today=$(date +%Y-%m-%d)
if grep -q "$today" "$holiday_file"; then
echo "Сегодня праздник. Задача не выполняется."
exit 0
fi
▪️ Альтернатива: запуск только по выходным с 3 до 6 утра
(( dow == 6 || dow == 7 )) && (( hour >= 3 && hour < 6 )) && run_task
▪️ Запуск через cron
*/10 * * * * /usr/local/bin/task_scheduler.sh >> /var/log/task.log 2>&1
BashTex 📱 #bash #utils