Планирование задач
Планирование задач¶
Systemd
systemd
- это сервис, который позволяет автоматизировать выполнение различных скриптов. Он позволяет настроить таймер, интервал или конкретный триггер для запуска определённой задачи. Для этого нужно выполнить 3 шага:
- создать таймер
- создать службу
- запустить таймер
Создание таймера
Сначала нужно создать каталог, в котором будет храниться таймер:
sudo mkdir /etc/systemd/system/mytimer.timer.d
sudo vim /etc/systemd/system/mytimer.timer
Теперь можно создать скрипт, который будет настраивать таймер. Любой таймер должен содержать 3 опции: Unit
- содержит описание таймера; Timer
- указывает, когда запускать и активировать таймер; Install
- указывает, где установить таймер
[Unit]
Description=My Timer
[Timer]
OnBootSec=3min #используется, когды мы хотим запускать скрипт 1 раз после загрузки системы
OnUnitActiveSec=1hour #используется, когда мы хотим запускать скрипт регулярно
[Install]
WantedBy=timers.target
Создание службы
Теперь можно создать сам сервис:
sudo vim /etc/systemd/system/mytimer.service
Сервис тоже должен содержать 3 опции: Unit
- содержит описание сервиса; Service
- содержит полный путь до нашего скрипта; Install
- содержит описание запуска
[Unit]
Description=My Service
[Service]
ExecStart=/full/path/to/my/script.sh
[Install]
WantedBy=multi-user.target #это модульная система, которая активируется при запуске
#обычного многопользовательского режима; определяет службы,
#который должны запускаться при обычном запуске системы
Запуск таймера (непонятно, почему таймера, когда мы службу запускаем, но пусть будет так)
Теперь нужно перечитать заново все папки с сервисами:
sudo systemctl daemon-reload
После этого можно вручную запустить сервис и добавить его в автозапуск:
sudo systemctl start mytimer.service
sudo systemctl enable mytimer.service
Cron
Cron
- аналогичный инструмент для автоматизации сервисов
Чтобы автоматизировать задачу через cron
, нужно создать файл crontab
, который будет содержать сам сервис, а затем сообщить демону cron
когда запускать сервис:
# System Update
* */6 * * /path/to/update_software.sh #должно выполняться каждые 6 часов скриптом
#update_software.sh (хотя тут вопрос, почему
#только 4 колонки со временем)
# Execute scripts
0 0 1 * * /path/to/scripts/run_scripts.sh #должно выполняться каждое первое число
#месяца в полночь скриптом run_scripts.sh
# Cleanup DB
0 0 * * 0 /path/to/scripts/clean_database.sh #должно выполняться каждое воскресенье в
#полночь скриптом clean_datavase.sh
# Backups
0 0 * * 7 /path/to/scripts/backup.sh #должно выполняться каждое воскресенье в
#полночь скриптом backup.sh
#непонятно, почему воскресенье указывается и как 7, и как 0
В этом примере первые 5 колонок обозначают определённые правила запуска:
- минуты (0-59)
- часы (0-23)
- дни месяца (1-31)
- месяцы (1-12)
- дни недели (0-7)
Как кажется лично мне, проще настроить crontab
-файл, потому что в нём просто указываются настройка времени запуска и скрипт, который необходимо запускать