Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Оглавление

Информация
titleДанная статья связана с

Накопители информации с твердотельными носителями информации (SSD): особенности применения

Информация
titleДанная статья применима к
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8)
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7)
  • Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
  • Astra Linux Special Edition РУСБ.10015-16 исп. 1 и исп. 2
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.5)
  • Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)
  • Astra Linux Common Edition 2.12

Аннотация

В настоящей статье описывается работа с таймерами systemd — специальными юнитами службы systemd, управляющими запуском других юнитов systemd или программ. 

Термины

  • Cron — системная служба,
которая запускает
  • запускающая в указанное время перечисленные для неё задания.
Служба запускается один раз при загрузке системы. Редактирование списка заданий рекомендуется выполнять при помощи команды:
Command
sudo crontab -e

Справка по командам доступна в в man cron

Управление заданиями службы возможно из графического интерфейса через Планировщик задач.

  • Systemd — системная служба,
которая обеспечивает параллельный запуск других служб
  • обеспечивающая управление юнитами в процессе загрузки
ОС. Systemd оперирует специально оформленными файлами конфигурации— юнитами
  • и функционирования ОС. 
  • Якорь
    unit
    unit
    Юнит
     ( unit )
    специально оформленный файл конфигурации Systemd . Каждый юнит отвечает за
конкретную службу
  • определенную функциональность:
    • службу  ( *.service )
,
    • ;
    • точку монтирования ( *.mount )
,
    • ;
    • устройство ( *.device )
,
    • ;
    • файл подкачки ( *.swap )
,
    • ;
    • сокет ( *.socket );
    • таймер (*.timer);
    • и т. д.
  Юниты systemd имеют фиксированный набор параметров, оформленных в виде параметров команды

Общие особенности юнитов

  • Юниты поддерживают выполнение фиксированного набора команд systemctl ( start, stop, reload, restart
и
  •  и т.д.).

Таймер systemd (далее просто таймер) файлы юнитов systemd, имя которых имеет расширение (*.timer); они позволяют контролировать файлы служб (*.service).

В зависимости от принципов запуска существуют два типа таймеров:

  • Юниты могут запускаться как от имени суперпользователя (общесистемные юниты), так и от имени непривилегированных пользователей (пользовательские юниты).
  • По умолчанию пользовательские юниты существуют только в пределах пользовательских сессий, в которой они созданы, если не разрешена их работа вне пользовательской сессии. Разрешить работу пользовательских приложений вне пользовательских 

    сессий можно командами:

    • для текущего пользователя:
      Command
      loginctl enable-linger $USER
    • для других пользователей:
      Command
      sudo loginctl enable-linger <имя_пользователя>
  • Для работы с общесистемными юнитами требуются права администратора (используется sudo). Работа с пользовательскими юнитами выполняется с указанием опции --user команды systemctl от имени непривилегированного пользователя .

Служба cron

Раскрыть

Служба cron устанавливается при установке ОС и запускается автоматически при загрузке. Служба поддерживает общесистемные и пользовательские таблицы заданий. Редактирование пользовательского списка заданий рекомендуется выполнять при помощи команды:

Command
crontab -e

Для работы с общесистемной таблицей заданий можно использовать ту же команду от имени суперпользователя (sudo). Справка по настройке таблиц заданий доступна в  man cron.

Таймеры systemd

Таймеры systemd различаются:

  • по принципу запуска:
    • таймеры реального времени — срабатывают в определенные моменты времени
  • таймеры реального времени, запускаются с привязкой к системным часам
    • . Аналогичны инструменту cron, но обладают более гибкими настройками периодов работы;
    • монотонные таймеры запускающиеся в назначенное время, прошедшее с определенной начальной точки. 
    • Информация

      Таймеры реального времени systemd не связаны с RTOS (real-time operating system)

    • монотонные таймеры — срабатывают через заданное время прошедшее с определенного начального  момента (определенного события).
  • по времени существования:
    • постоянные таймеры;
    •  временные таймеры:
      • временные пользовательские таймеры существуют только в пределах пользовательских сессий, в которой они созданы, если не разрешена их работа вне пользовательской сессии.
      • временные общесистемные таймеры существуют до перезагрузки ОС.

Различия таймеров и заданий cron

Раскрыть

Основные причины для применения таймеров вместо

заданий

заданий cron :

  • таймеры используют единую систему команд инструмента управления службами systemctl;
  • таймеры имеют встроенные функции для ведения журналов и отслеживания состояния выполнения;
    Информация

    Для каждого таймера создается отдельный файл журнала journalctl

  • таймеры могут инициировать выполнение задач на основе событий системы, например запуска или окончания работы службы, вызванной другим таймером, а не только по расписанию как cron;
  • приоритет выполнения таймеров выше, чем у заданий cron;
  • systemd предотвращает
возникновение работающих юнитов-дублей
  • дублирование таймеров;
  • при совпадении времени запуска заданий cron эти задания
cron
  • выполняются последовательно,
если заданиям cron назначен одинаковый интервал выполнениия первым выполнится требующее меньшего времени на выполнение. Таймеры могут работать совместно как службы.
  • таймеры работают полностью параллельно.
Информация

Пользовательские юниты-таймеры будут запускаться только тогда, когда активен сеанс соответствующего пользователя

Создание таймеров

По умолчанию файлы с юнитами systemd, включая юниты с монотонными таймерами и таймерами реального времени распологаются юниты постоянных системных таймеров располагаются в каталоге /etc/systemd/system. Юниты системных временных таймеров хранятся в каталоге /run/systemd/transient, пользовательских временных таймеров — в каталоге /run/user/<числовой_идентификатор_пользователя>/systemd/transient. Числовой идентификатор пользователя можно получить командой:

Command
id -u <имя_пользователя>

Юнит таймера в обязательном порядке содержит ссылку на юнит службы. Файл с юнитом таймера (*.timer) содержит ссылку на файл с юнитом службы (*.service), которую он контролирует.

Systemd имеет несколько зарезервированных системных юнитов, перечень которых доступен по команде man systemd.special

Информация

Назначение занятых системных имён создаваемым юнитам нежелательно и приводит к ошибке выполнения создаваемого юнита

Общая структура

юнитов служб:

юнита

Блок кода
title/etc/systemd/system/Example.service
[Unit]
# Имя и описание службы
Description=this is a test example of the service # имя и описание службы
Type=oneshot # типТип службы, указан oneshot, без порождения подпроцессов для упрощения взаимодействия с таймерами
Type=oneshot
 
[Service]
Restart=on-failure # перезапускПерезапуск при сбое, необязательный параметр
Restart=on-failure 
# Пример выполняемой команды
ExecStart=/usr/local/bin/<имя файла или сценария> # примеры выполняемой команды

Где:

Example.service пример названия файла с юнитом службы юнита.service

Обязательные параметры:

  • Description краткое описание юнита, в описании допускаются пробелы и кавычки в начале и конце строки с описанием;
  • ExecStart  имя исполняемого файла, команды для командной строки, другой службы или сценария.

Общая справка доступна по команде man systemd units. Справка по юнитам служб и параметрам man systemd.service

Управление юнитом службы через таймер

Юнит таймера реального времени

В юните таймера должно быть указано имя юнита, которым управляет таймер. Для этого используется Для запуска юинта службы в файле с юнитом таймера (*.timer) необходимо указать параметр Unit=<имя_юнита_запускаемой_службы>.service, при . При этом допускается указание зарезервированных системных служб, перечисленных в man systemd.special

Общая структура юнитов таймеров реального времени:

.

Блок кода
title/etc/systemd/system/<Таймер>.timer
[Unit]
Description= # имяИмя и краткое описание таймера
Description= 

[Timer]
# Пример для запуска в каждый вечер пятницы
OnCalendar= Fri *-*-* 18:00:00

# Здесь указывается имя юнита службы 
Unit=Example.service

# Необязательные параметры
Persistent=true 
AccuracySec=1h
WakeSystem=30s

# Необязательная для таймеров секция
[Install]
WantedBy=timers.target

Где:

  • Description обязательный параметр, краткое описание таймера, допускаются пробелы;
  • Unit Unit обязательный параметр,   имя юнита запускаемой контролируемой службы, файла . service
    ИнформацияСледует различать секцию секцию [Unit] определяющую юнит параметры юнита таймера и параметр Unit , определяющий юнит службы.service, которым будет управлять таймер.
  • OnCalendar обязательный параметр для таймеров реального времени, определяет определяющий момент запуска службы из параметра Unit в указанный интервал.  
    Общий формат задания значения параметра:
    Блок кода
    OnCalendar=
    DayOfWeek Year-Month-Day Hour:Minute:Second. Допускается опускать какой либо из промежутков времени указывая вместо них *. Справка
    ДеньНедели Год-Месяц-День Час:Минута:Секунда
    Допускается:
    • пропускать неиспользуемые указания времени;
    • указывать символ * в значении "каждый";
    • для указания интервалов использовать две точки;
    • для перечислений использовать запятые;
    • для указания отсчёта от окончания периода использовать символ ~ вместо символа -.

Подробная справка о формате времени доступна по

команде

команде man 7 systemd.time.

Примеры значений параметра:

Раскрыть
titleПримеры
  • каждое 15 число каждого месяца каждого года
    OnCalendar= *-*-15
  • каждый день
,
  • каждого месяца каждого года с понедельника по пятницу,
утром
  • в 7:00:
    OnCalendar=Mon..Fri *-*-* 7:00:00
  • каждую субботу и воскресенье
вечером
  • в 19:00 и в 19:30:
    OnCalendar=Sun,Sat *-*-* 19,19:30:00
  • если последний день месяца пятница:
    OnCalendar=Fri *-*~1

проверить или уточнить формат даты можно командой:

Command
Titlesystemd-analyze calendar Mon..Sun

 Original form: Mon..Sun
Normalized form: *-*-* 00:00:00
   Next elapse: Fri 2024-11-29 00:00:00 MSK
      (in UTC): Thu 2024-11-28 21:00:00 UTC
      From now: 8h left

Где Mon..Sun интересующий момент времени.

Информация

Для таймеров реального времени допускается указание нескольких параметров OnCalendar с разными интервалами времени и моментами срабатывания

  • Persistent указание запустить таймер немедленно после старта системы, если предыдущий запуск был пропущен, по умолчанию  false.
  • AccuracySec  точность момента запуска таймера. Таймеры будут запускаться в разные моменты времени в пределах указанного диапазона, начиная с указанного времени старта.Необходим для Этот прааметр предназначен для снижения нагрузки на ресурсы компьютера при одновременном запуске нескольких таймеров;. Значение этого параметра по умолчанию — одна минута, что дает соответствующий разброс времени запуска контролируемых таймерами служб. Если такое поведение неприемлемо, то следует уменьшить значение этого параметра.
  • WakeSystem  интервал, через который будет осуществлен вывод ОС из режима ожидания (suspend) после окончания отсчёта времени таймером;.
  • WantedBy  указывает на целевое состояние при котором запускается данный юнит. Целевое состояние определяется статусом загруженной ОС. Для таймеров по умолчанию задано значение  timers.target.

Перечень целевых состояний доступен по команде:

Command

systemctl list-unit-files --type=target

Справка по конфигурированию настройке таймеров доступна по команде команде man systemd.timer

Общая структура юнитов монотонных таймеров

Юнит монотонного таймера

В юнитах монотонных таймеров указывается событие, от которого начинается отсчет времени срабатывания таймера. Перечень возможных параметров, задающих событие:

  • OnBootSec — можно считать, что отсчет времени ведется с момента начала отсчета времени ядром. Контролируемый юнит выполняется однократно. Если при создании таймера указанное время прошло — то контролируемый юнит выполняется немедленно.
  • OnStartupSec — отсчет с момента запуска службы systemd. Для системных таймеров параметр близок к параметру OnBootSec, так как системная служба контроля таймеров при загрузке системы стартует как можно раньше. Для пользовательских таймеров отсчет ведется от момента запуска пользовательской службы контроля таймеров, которая запускается при первом входе пользователя. Контролируемый юнит выполняется однократно. Если при создании таймера указанное время прошло — то контролируемый юнит выполняется немедленно.
  • OnActiveSec отсчет от момента активации таймера.
  • OnUnitActiveSec — отсчет от старта контролируемого юнита. Для начала отсчета юнит должен быть запущен принудительно.
  • OnUnitInactiveSec — отсчет от завершения работы отслеживаемого юнита. Для начала отсчета юнит должен быть запущен принудительно.
  • OnClockChange, OnTimezoneChange — при значении true событием считается изменение показаний системных часов реального времени (CLOCK_REALTIME) относительно показаний монотонных часов (CLOCK_MONOTONIC) или изменение временной зоны.

Перечень значений параметра <интервал> задается указанием временного промежутка (15m — 15 минут, 1h — один час и т.д. ) подробнее  см. man systemd.time

Пример юнита монотонного таймера:

Блок кода
title/etc/systemd/system/<МоноТаймер>.timer
....[Unit]
# Имя и краткое описание таймера
Description= 
 
[Timer]
# Формат <Событие>=<интервал>, пример:

OnActiveSec=50minutes
# . В указанном примере таймер вновьсработает через 50 минут после собственного запуска
OnActiveSec=50minutes
 
# Здесь указывается имя юнита службы 
Unit=Example....

Где:

Перечень значений параметра <Событие>, с момента которых ведется отсчёт времени, указанный значением <интервал> таймера:

  • OnStartupSec после успешного запуска службы systemd;
  • OnBootSec после запуска системных служб службой systemd;
  • OnActiveSec старт текущего юнита таймера;
  • OnUnitActiveSec - при старте отслеживаемого юнита службы;
  • OnUnitInactiveSec - при завершении работы отслеживаемого юнита службы.
service
 
# Необязательные параметры
Persistent=true
AccuracySec=1h
WakeSystem=30s
 
# Необязательная для таймеров секция
[Install]
WantedBy=timers.target

Запуск и отладка таймера

Перед запуском таймера необходимо перезагрузить :

  1. Перезагрузить конфигурацию служб systemd: 
    Command
    sudo systemctl daemon-reload
 И проверить
  1.               
  2. Проверить юниты на наличие синтаксических ошибок:
    Command

    systemd-analyze verify <имя_юнита>.timer # или .service

Запуск таймера
  1. Запустить таймер:
    Command
    sudo systemctl start <имя_таймера>.timer
Информация

Когда отсчёт таймера доходит до нуля, таймер повторно выполняет запуск указанного юнита

Временное выполнение таймера

Чтобы инициировать таймер, который будет работать только пока существует текущий сеанс, выполнить:

Временные таймеры

Временные таймеры управляют выполнением заданных команд. Такие таймеры создаются с помощью команды  systemd-run.

Command
sudo systemd-run --<событие>="время" --unit="<название_таймера>"название службы" <команда>

При выполнении команды автоматически создаются:

  • юнит службы <название_таймера> .service ;
  • юнит таймера <название_таймера> .timer.

Опции команды Где:

--<событие> это < событие > одно из событий срабатывания таймера, . Используются аналоги событий, задаваемых параметрами постоянных таймеров

  • --on-boot  —  OnBootSec;
    Раскрыть
    titleПример
    Временный таймер, который 
  • --on-active   OnActiveSec;

  • --on-startup OnStartupSec ;

  • --on-unit-active —  OnUnitActiveSec;

  • --on-unit-inactiveOnUnitInactiveSec;

  • --on-calendarOnCalendar.

Пример:

Раскрыть
titleПример

Временный таймер, который

делает

каждую минуту выполняет команду "date >> ~/log.txt", делающую запись в текстовый файл

каждую минутуидентификатор временного таймера

log.txt в домашнем каталоге пользователя:

Command
Titlesystemd-run --user --on-calendar '*:0/1' /bin/sh -c "date >> ~/log.txt"

Running timer as unit: run-r81fc2842fa884a639d020dea5faabb9d.timer
Will run service as unit: run-r81fc2842fa884a639d020dea5faabb9d.service

  # последовательность r81fc2842fa884a639d020dea5faabb9d это 


Где *:0/1 - время выполнения (каждую минуту) , справка по формату времени см.  man systemd .time

Содержимое текстового файла с записями:

Блок кода
title~/log.txt
Пн 11 ноя 2024 10:03:00 MSK
Пн 11 ноя 2024 10:04:00 MSK
Пн 11 ноя 2024 10:05:00 MSK
Пн 11 ноя 2024 10:06:00 MSK
Пн 11 ноя 2024 10:07:00 MSK
Пн 11 ноя 2024 10:08:00 MSK
Пн 11 ноя 2024 10:09:00 MSK
Пн 11 ноя 2024 10:10:00 MSK

Останов Принудительный останов временного таймера:

Command
sudo systemctl --user stop run-r81fc2842fa884a639d020dea5faabb9d.timer

Где параметр --user запускает таймер от имени текущего пользователя, а r81fc2842fa884a639d020dea5faabb9d - идентификатор таймера. Временные таймеры хранятся в каталоге /run/systemd/transient если заданы без параметра --user или в /run/user/<идентификатор_пользователя>/systemd/transient. Идентификатор пользователя доступен по команде id -u, файлы временных таймеров, хранящихся в указанных каталогах и в качестве имени используют идентификаторы. 

 Справка см. man 1 systemd-run

          

Управление таймерами

  • получить список всех системных таймеров, определенных в системе:
    Command

    systemctl list-timers --all

  • получить список активных системных таймеров:
    Command

    systemctl list-timers

  • получить информацию о статусе конкретного системного таймера:
    Command

    systemctl status <имя_таймера>.timer

    указание systemctl status *timer выведет информацию обо всех таймерах, определенных в системе.

Для получения информации и пользовательских таймерах следует использовать опцию --user.
Пуск, автозапуск, перезапуск, останов, отключение аналогичны командам systemctl для служб. Справка доступна по команде man systemctl, краткая по systemctl -h

Просмотр журналов юнитов

Посмотреть записи журнала конкретного юнита:

Command
            sudo journalctl -b -u <имя_юнита> # .service или .timer, параметр -b ограничивает вывод записей текущей загрузкой

Чтобы ограничить вывод записей определенным интервалом, используется параметры -S и -U (от и до), пример:

Command

sudo journalctl -S  "2024-11-03 07:00:00" -U "2024-11-07 07:15:00" -u anacron.timer # имя юнита для примера

Информация

Anacron это вспомогательный инструмент cron для запуска пропущенных cron во время отключения компьютера заданий.

Следует различать параметры -u (юнит) и -U (до)

или конретным конкретным интервалом (пример - день назад):

Command

sudo journalctl -S -1d -u anacron.timer

Справка доступна по команде man journalctl , краткая справка по параметрам - journalctl -h

Начиная с очередного обновления 1.7 в Astra Linux Special Edition просмотр журналов юнитов возможен из графического интерфейса через Журнал аудита.