Планування завдань з cron

  • OpenWrt підтримує запуск запланованих завдань за допомогою служби cron.
  • У цьому посібнику описано, як налаштувати cron-завдання.
  • Також перегляньте Watchcat для перезапуску системи за розкладом або при втраті з’єднання.
  • Запуск програм або скриптів у заданий час.
  • Автоматизація управління запланованими завданнями.

Налаштування cron-завдань через вебінтерфейс:

  1. Перейдіть до LuCI → System → Scheduled Tasks.
  2. Відредагуйте конфігурацію та натисніть Save.

Налаштування cron-завдань через CLI:

# Редагувати конфігурацію
crontab -e
 
# Показати поточну конфігурацію
crontab -l
 
# Застосувати зміни
service cron restart

Це відкриє файл конфігурації /etc/crontabs/root у редакторі vi.

:!: Обов’язково додайте символ нового рядка в кінці файлу. Просто залиште порожній рядок в кінці.

Кожен рядок — окреме завдання, що має формат:

* * * * * команда для виконання
- - - - -
| | | | |
| | | | ----- День тижня (0 - 6) (неділя = 0)
| | | ------- Місяць (1 - 12)
| | --------- День (1 - 31)
| ----------- Година (0 - 23)
------------- Хвилина (0 - 59)

Приклади формату часу:

хв
0–59
год
0–23
день
1–31
місяць
1–12
день тижня
0–6
Опис
*/5 * * * * Кожні 5 хвилин
12 */3 * * * Що 3 години на 12-й хвилині
57 11 15 1,6,12 * О 11:57 15-го числа січня, червня та грудня
25 6 * * 1-5 О 6:25 в будні дні (понеділок–пʼятниця)
0 0 4,12,26 * * Опівночі 4-го, 12-го і 26-го числа кожного місяця
5,10 9,14 10 * 0,4 О 9:05, 9:10, 14:05 та 14:10 щонеділі та щочетверга

:!: 0 (нуль) означає неділю. Якщо вказати 7, BusyBox буде виконувати команду щодня.

Таблиця скорочень:

Скорочення Еквівалент Опис
@reboot Один раз при старті
@yearly 0 0 1 1 * Щороку
@annually 0 0 1 1 * Щороку
@monthly 0 0 1 * * Щомісяця
@weekly 0 0 * * 0 Щотижня
@daily 0 0 * * * Щодня
@midnight 0 0 * * * Щодня
@hourly 0 * * * * Щогодини

:!: Ці скорочення не активовані за замовчуванням. Вони працюють лише якщо busybox скомпільовано з опцією `FEATURE_CROND_SPECIAL_TIMES`.

Щоб переглянути лог-повідомлення:

logread -e cron

Не всі повідомлення потрапляють до логів. Щоб збільшити деталізацію, змініть параметр cronloglevel.

Простий спосіб вирішення деяких важко виявлюваних проблем (витік памʼяті, зниження продуктивності тощо) — це періодичне перезавантаження роутера, наприклад, щонічне.

Однак усе не так просто, як здається, оскільки більшість роутерів не мають апаратного годинника реального часу (RTC). Це може призвести до нескінченного циклу перезавантажень.

Під час завантаження годинник встановлюється утилітою sysfixtime на час останньої модифікації будь-якого файлу в каталозі `/etc`. Найновішим файлом може бути, наприклад, файл статусу або конфігурації, який змінився за ~30 секунд до перезавантаження. Отже, під час завантаження годинник “відмотується назад” на кілька секунд. Потім запускається cron і знову бачить, що “час на перезавантаження” вже настав — і перезавантажує пристрій ще раз... Наприкінці завантаження запускається ntpd, який може встановити правильний час — але пізніше, ніж cron встигне ініціювати ще одне перезавантаження.

Рішення: додати затримку та створити (touch) файл у /etc перед командою перезавантаження.

# Перезавантаження щодня о 4:30
# Уникаємо нескінченого циклу: чекаємо 70 секунд
# і торкаємось файлу в /etc, щоб годинник піднявся вище 4:30
30 4 * * * sleep 70 && touch /etc/banner && reboot

:!: На багатьох пристроях команда shutdown не вимикає живлення — лише зупиняє процесор. У таких випадках reboot працює коректно.

Простий спосіб автоматично перезапускати мережу (LAN, WAN і Wi-Fi) кожні 10 хвилин:

*/10 * * * * service network restart

Якщо у вас увімкнено літній час (DST), ви можете реалізувати функцію “розумного будильника”.

Коли в Центральній Європі починається DST, годинник переводиться з 02:00 CET на 03:00 CEST (остання неділя березня). За шість днів до цього можна налаштувати Wake-on-LAN, щоб прокинутися на 10 хвилин раніше (запізнення не спрацює — запізнитесь).

Коли DST завершується (остання неділя жовтня), годинник переводиться з 03:00 CEST на 02:00 CET.

# хв година день місяць день_тижня команда
59 05 * * 1 /usr/bin/wol -h 192.168.1.255 xx:xx:xx:xx:xx:xx
# crontab має завершуватись порожнім рядком або коментарем

Щоб зберігати останні N конфігурацій у каталозі /root, можна скористатись cron. Це дозволить вам повертатися до конфігурацій останніх N днів. Завдання можна розширити, щоб копіювати конфігурації на інший пристрій для швидкого відновлення.

# Створення резервної копії/знімку конфігурації щодня о 00:01. Зберігати останні 100
#01 00 * * * sysupgrade -b "/root/backup-${HOSTNAME}.tar.gz" # <-- лише одна копія
01 00 * * * find "/root" -type f -name "backup-*.tar.gz" | sort -r | awk 'NR > 100' | xargs rm -f; sysupgrade -b "/root/backup-${HOSTNAME}-$(date +\%Y-\%m-\%d-\%H-\%M-\%S).tar.gz"
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
  • Last modified: 2025/05/30 13:31
  • by vazaz