3.9.11.1 Настройка и использование systemd-таймеров
Скачать документ Системные таймеры и чтение информации о них
Примеры использования таймеров
Создание таймеров
Преимущества и недостатки работы с таймерами
Таймеры — файлы юнитов systemd, имя которых имеет суффикс .timer; они позволяют контролировать файлы .service или определенные события. Эти таймеры могут быть использованы в качестве замены cron. Таймеры имеют встроенную поддержку календарных и регулярных событий и могут запускаться в асинхронном режиме.
Вы можете подробнее ознакомиться с созданием и настройкой systemd-таймеров, просмотрев наши обучающие видео:
на RuTube — Настраиваем таймеры systemd вместо заданий cron;
в Яндекс.Дзен — Настраиваем таймеры systemd вместо заданий cron;
в VK Видео — Настраиваем таймеры systemd вместо заданий cron.
На наших каналах вы также сможете найти много другой полезной информации.
Системные таймеры и чтение информации о них
Когда система РЕД ОС устанавливается на компьютер, создается несколько системных таймеров, являющихся частью процедур обслуживания системы.
Чтобы увидеть, какие таймеры работают на данный момент, введите команду:
systemctl status *timer ● dnf-makecache.timer - dnf makecache --timer Loaded: loaded (/usr/lib/systemd/system/dnf-makecache.timer; enabled; vendo Active: active (waiting) since Thu 2022-06-23 10:03:35 MSK; 4h 37min ago Trigger: Thu 2022-06-23 15:18:12 MSK; 37min left Triggers: ● dnf-makecache.service июн 23 10:03:35 localhost.localdomain systemd[1]: Started dnf makecache --timer. ● sysstat-summary.timer - Generate summary of yesterday's process accounting Loaded: loaded (/usr/lib/systemd/system/sysstat-summary.timer; enabled; ven Active: active (waiting) since Thu 2022-06-23 10:03:35 MSK; 4h 37min ago Trigger: Fri 2022-06-24 00:07:00 MSK; 9h left Triggers: ● sysstat-summary.service июн 23 10:03:35 localhost.localdomain systemd[1]: Started Generate summary of ye ● systemd-tmpfiles-clean.timer - Daily Cleanup of Temporary Directories Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-clean.timer; stati Active: active (waiting) since Thu 2022-06-23 10:03:35 MSK; 4h 37min ago Trigger: Fri 2022-06-24 10:19:11 MSK; 19h left Triggers: ● systemd-tmpfiles-clean.service Docs: man:tmpfiles.d(5) man:systemd-tmpfiles(8) июн 23 10:03:35 localhost.localdomain systemd[1]: Started Daily Cleanup of Tempo ● sysstat-collect.timer - Run system activity accounting tool every 10 minutes Loaded: loaded (/usr/lib/systemd/system/sysstat-collect.timer; enabled; ven Active: active (waiting) since Thu 2022-06-23 10:03:35 MSK; 4h 37min ago Trigger: Thu 2022-06-23 14:50:00 MSK; 9min left Triggers: ● sysstat-collect.service июн 23 10:03:35 localhost.localdomain systemd[1]: Started Run system activity ac
С каждым таймером связано, по меньшей мере, шесть строк, содержащих сведения о нём:
Имя файла таймера и короткое описание цели существования этого таймера (но не всегда).
Сведения о состоянии таймера - загружен ли таймер, полный путь к файлу таймера, состояние vendor preset (disabled или enabled).
Сведения об активности таймера, куда входят данные о том, когда именно таймер был активирован.
Дата и время следующего запуска таймера и примерное время, оставшееся до его запуска.
Имя сервиса или события, вызываемого таймером.
Некоторые (но не все) таймеры содержат указатели на документацию.
Примеры использования таймеров
Самым простым примером использования таймеров можно считать системный таймер systemd-tmpfiles-clean. Как следует из названия, данный таймер раз в некоторое время производит очистку временных файлов системы.
● systemd-tmpfiles-clean.timer - Daily Cleanup of Temporary Directories Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-clean.timer; stati Active: active (waiting) since Thu 2022-06-23 10:03:35 MSK; 4h 37min ago Trigger: Fri 2022-06-24 10:19:11 MSK; 19h left Triggers: ● systemd-tmpfiles-clean.service Docs: man:tmpfiles.d(5) man:systemd-tmpfiles(8)
Данный таймер является системным и включен по умолчанию.
Создание таймеров
В системе РЕД ОС юниты systemd располагаются в следующих директориях:
/usr/lib/systemd/system – юниты, поставляемые вместе с системой и устанавливаемыми приложениями;
/etc/systemd/system – юниты системного администратора.
Для примера будет создан простой файл конфигурации сервиса, запускающий команду free (утилита, выводящая информацию об использовании оперативной памяти). Это может пригодиться, если необходимо регулярно отслеживать объём свободной памяти.
Создайте unit-файл с именем ramMonitor.service в папке /etc/systemd/system.
nano /etc/systemd/system/ramMonitor.service
И добавьте в него следующие строки:
[Unit]
Description=Monitors RAM # Описание сервиса
Wants=ramMonitor.timer # Зависимость, отсылается к таймеру (будет создан позже)
[Service]
Type=oneshot # Тип службы, означающий выполнение одного задания и завершение
ExecStart=/usr/bin/free # Указывается полный путь к исполняемому файлу программы
[Install]
WantedBy=multi-user.target # Указывается, на каком уровне происходит запуск сервиса. Параметр multi-user.target указывает на запуск в многопользовательском режиме без графики
Данный файл можно назвать простейшим файлом конфигурации сервиса.
После проведенных манипуляций, проверьте состояние вашего сервиса командой:
systemctl status ramMonitor.service ● ramMonitor.service - Monitors RAM Loaded: loaded (/etc/systemd/system/ramMonitor.service; disabled; vendor pr Active: inactive (dead)
Сервис существует, но не активен. Запустите сервис и проверьте его статус:
systemctl start ramMonitor.service systemctl status ramMonitor.service ● ramMonitor.service - Monitors RAM Loaded: loaded (/etc/systemd/system/ramMonitor.service; disabled; vendor pr Active: inactive (dead) июн 23 15:08:44 localhost.localdomain systemd[1]: Starting Monitors RAM... июн 23 15:08:44 localhost.localdomain systemd[1]: ramMonitor.service: Succeeded. июн 23 15:08:44 localhost.localdomain systemd[1]: Finished Monitors RAM. июн 23 15:08:44 localhost.localdomain free[3914]: total use июн 23 15:08:44 localhost.localdomain free[3914]: Mem: 995784 53659 июн 23 15:08:44 localhost.localdomain free[3914]: Swap: 2097148 927
При включении сервиса в терминале не выводится никаких сообщений. Это происходит, потому что по умолчанию стандартный вывод (stdout) от программ, запускаемых systemd, перенаправляется в журнал systemd.
Чтобы проверить этот журнал, воспользуйтесь командой:
journalctl -u ramMonitor.service -- Logs begin at Thu 2022-04-21 11:49:59 MSK, end at Thu 2022-06-23 15:12:30 MSK июн 23 15:08:44 localhost.localdomain systemd[1]: Starting Monitors RAM... июн 23 15:08:44 localhost.localdomain systemd[1]: ramMonitor.service: Succeeded. июн 23 15:08:44 localhost.localdomain systemd[1]: Finished Monitors RAM. июн 23 15:08:44 localhost.localdomain free[3914]: total use июн 23 15:08:44 localhost.localdomain free[3914]: Mem: 995784 53659 июн 23 15:08:44 localhost.localdomain free[3914]: Swap: 2097148 927
С помощью ключа -S вы можете указать временной период, за который утилита journalctl будет искать записи. Например, journalctl -S today -u ramMonitor.service
выведет записи, сделанные за сегодня.
Убедившись в работоспособности сервиса, создайте для него таймер. Для этого необходимо создать в той же папке файл с названием ramMonitor.timer.
nano /etc/systemd/system/ramMonitor.timer
В файл добавьте следующее содержимое:
[Unit]
Description=Monitors RAM
Requires=ramMonitor.service # Указание строгой зависимости
[Timer]
Unit=ramMonitor.service # Ссылка на сервис
OnCalendar=*-*-* *:*:00 # Срабатывание таймера по условию календаря. В данном случае – каждую минуту
[Install]
WantedBy=timers.target
В секции [Timer] указываются условия запуска. Таймеры могут быть двух типов: событийные и монотонные. Первые активируются по событию, вторые выполняются периодически. Из событий таймеров можно выделить OnBootSec, срабатывающий через определенное время после запуска системы. Из монотонных следует выделить:
OnUnitActiveSec - срабатывает через указанное время после активации целевого юнита;
OnUnitInactiveSec — срабатывает так же, как OnUnitActiveSec, только время отсчитывается с момента прекращения работы целевого юнита, хорошо подходит для «длительных» задач, например, бекапов.
OnCalendar - срабатывает по условию календаря.
В качестве формата даты для календаря используется формат:
DOW YYYY-MM-DD HH:MM:SS
(где DOW – Day Of Week – день недели, необязательный параметр; за ним следует указание года, месяца, дня через дефис и часы, минуты и секунды через двоеточие. Для указания любого значения используется «*», перечисления делаются через запятую, а диапазоны через «..»).
После завершения настройки нужно запустить таймер и проверить его статус:
systemctl start ramMonitor.timer systemctl status ramMonitor.timer ● ramMonitor.timer - Monitors RAM Loaded: loaded (/etc/systemd/system/ramMonitor.timer; disabled; vendor pres Active: active (waiting) since Thu 2022-06-23 15:16:22 MSK; 7s ago Trigger: Thu 2022-06-23 15:17:00 MSK; 29s left Triggers: ● ramMonitor.service июн 23 15:16:22 localhost.localdomain systemd[1]: Started Monitors RAM.
Если все настроено верно, таймер будет иметь состояние active (waiting), а ниже будет указано время до его запуска.
Преимущества и недостатки работы с таймерами
Основные преимущества:
Задачи могут быть легко запущены сразу, независимо от их таймеров - это упрощает отладку.
Каждая задача может быть настроена для работы в определенной среде.
Задачи могут быть настроены в зависимости от других юнитов systemd.
Задачи регистрируются в журнале systemd.
Единственным недостатком можно считать сложность создания таких таймеров: чтобы настроить задачу, запускаемую в определенное время при помощи systemd, нужно создать два файла и использовать команды systemctl. По сравнению с добавлением одной строки в crontab. Кроме того в systemd отсутствует встроенный аналог cron’овского MAILTO для отправки писем при сбоях.
Дата последнего изменения: 19.09.2024
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.