Skip to content

Планирование задач

Планирование задач

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-файл, потому что в нём просто указываются настройка времени запуска и скрипт, который необходимо запускать