Оглавление |
---|
Информация | ||
---|---|---|
| ||
Накопители информации с твердотельными носителями информации (SSD): особенности применения |
Информация | ||
---|---|---|
| ||
|
Общая информация
Cron запускается один раз при загрузке системы. Редактирование списка заданий рекомендуется выполнять при помощи команды:
Command |
---|
sudo crontab -e |
Управление заданиями службы возможно из графического интерфейса через Планировщик задач
Юнит
Systemd
оперирует специально оформленными файлами конфигурации— юнитами (
— специально оформленный файл конфигурации unit
)Systemd
. Каждый юнит отвечает за конкретную службу (*.service
), точку монтирования (*.mount
), устройство (*.device
), файл подкачки (*.swap
), сокет (*.socket
) и т. д. Юниты systemd
имеют поддерживают фиксированный набор параметровкоманд, оформленных в виде параметров команды команды systemctl
(start, stop, reload, restart
и т.д.).
Служба cron
Раскрыть | ||
---|---|---|
запускается автоматически при загрузке. Служба поддерживает общесистемные и пользовательские таблицы заданий. Редактирование пользовательского списка заданий рекомендуется выполнять при помощи команды:
Для работы с общесистемной таблицей заданий можно использовать ту же команду от имени суперпользователя (sudo). |
Таймеры Systemd
Информация systemd
не связаны с RTOS (real-time operating system)
Оба типа таймеров могут быть:
- Постоянными или временными (существующими в ограниченном отрезке времени).
- Общесистемными или пользовательскими.
Временные пользовательские таймеры существуют только в пределах пользовательских сессий, в которой они созданы, если не разрешена их работа вне пользовательской сессии. Разрешить работу пользовательских приложений вне пользовательских сессий можно командой:
- для текущего пользователя:
Command loginctl enable-linger $USER - для других пользователей:
Command sudo loginctl enable-linger <имя_пользователя>
Временные общесистемные таймеры существуют до перезагрузки ОС.
Для работы с общесистемными таймерами используется sudo. Работа с пользовательскими таймерами осуществляется без использования sudo от имени непривилегированного пользователя с указанием опции --user в командах systemctl.
Различия таймеров и заданий cron
Раскрыть |
---|
Основные причины для применения таймеров вместо |
заданий
|
cron
назначен одинаковый интервал выполнениия первым выполнится требующее меньшего времени на выполнение. Таймеры могут работать совместно как службы.Создание постоянных
Созданиетаймеров
По умолчанию файлы с юнитами , включая юниты с таймерами, распологаются юниты постоянных системных таймеров располагаются в каталоге
/etc/systemd/system
. Юниты системных временных таймеров хранятся в каталоге /run/systemd/transient
, пользовательских временных таймеров — в каталоге /run/user/<числовой_идентификатор_пользователя>/systemd/transient
. Числовой идентификатор пользователя можно получить командой:
Command |
---|
id -u <имя_пользователя> |
Юнит таймера в обязательном порядке содержит ссылку на юнит службы Файл с юнитом таймера имеет ссылку на файл с юнитом службы
Информация |
---|
Общая структура
юнитов служб:юнита службы
Блок кода | ||
---|---|---|
| ||
[Unit] Description= # имяИмя и описание службы Type=oneshot # типDescription=this is a test example of the service # Тип службы, указан oneshot, без порождения подпроцессов для упрощения взаимодействия с таймерами Type=oneshot [Service] # Перезапуск при сбое, необязательный параметр Restart=on-failure # Пример выполняемой команды ExecStart=/usr/local/bin/<имя файла или сценария> # примеры выполняемой команды |
Справка доступна по команде man systemd.units
Где:
Example.service
- Description
- ExecStart имя исполняемого файла, команды для командной строки, другой службы или сценария.
Общая справка доступна по команде man systemd units
. Справка по юнитам служб и параметрам man systemd.service
Управление юнитами службы через таймер
Для запуска юнита службы необходимо указать его имя в юните таймера.Unit=<имя_юнита_запускаемой_службы>.service.
При этом допускается указание зарезервированных системных служб, перечисленных в
Юнит таймера реального времени
Общая структура юнитов таймеров:Блок кода | ||
---|---|---|
| ||
[Unit] Description= # имяИмя и краткое описание таймера Description= [Timer] <Событие срабатывания таймера> Unit=<Служба>.service Unit=<имя юнита запускаемой службы># Пример для запуска в каждый вечер пятницы OnCalendar= Fri *-*-* 18:00:00 # Здесь указывается имя юнита службы Unit=Example.service # Необязательные параметры: Persistent=true # выполнить немедленно после старта системы, если предыдущий запуск был пропущен AccuracySec=1h # точность выполнения таймера. # Параметр необходим для снижения нагрузки на ресурсы компьютера при одновременном запуске нескольких таймеров # Таймеры будут запускаться в разные моменты времени в пределах указанного диапазона WakeSystem=30s # интервал, через который будет осуществлен вывод ОС из режима ожидания (suspend) после окончания таймера # Необязательная для таймеров секция [Install] WantedBy=timers.target # WantedBy= — указывает на целевое состояние при котором запускается данный юнит. Целевое состояние определяется статусом загруженной ОС - AccuracySec=1h WakeSystem=30s # Необязательная для таймеров секция [Install] WantedBy=timers.target |
Где:
- Unit Следует различать секцию
[Unit]
определяющую параметры юнита таймера и параметрUnit
, определяющий юнит службы.service
, которым будет управлять таймер. - OnCalendar
Unit
Допускается:Блок кода OnCalendar=ДеньНедели Год-Месяц-День Час:Минута:Секунда
- пропускать неиспользуемые указания времени;
- указывать символ * в значении "каждый";
- для указания интервалов использовать две точки;
- для перечислений использовать запятые;
- для указания отсчёта от окончания периода использовать символ ~ вместо символа -.
Подробная справка о формате времени доступна по команде man 7 systemd.time
.
Примеры значений параметра:
Раскрыть | |||||
---|---|---|---|---|---|
| |||||
проверить или уточнить формат даты можно командой:
Где Mon..Sun — интересующий момент времени. |
Информация |
---|
Для таймеров реального времени допускается указание нескольких параметров |
- Persistent
false.
- AccuracySec
- WakeSystem
- WantedBy
timers.target.
Перечень целевых состояний доступен по командеПеречегь целевых состояний:
Command |
---|
|
Справка по настройке таймеров доступна по команде man systemd.timer
Юнит монотонного таймера
Таймеры реального времени
Блок кода | ||
---|---|---|
| ||
.... [TimerUnit] OnCalendar=# DayOfWeek Year-Month-Day Hour:Minute:Second # параметр для задания таймера реального времени # вместо DayOfWeek указать Sun, Mon, Tue, Wed, Thu, Fri, Sat . Чтобы таймер выполнялся ежедневно, нужно не указывать параметр или указать Mon..Sun # вместо указания цифр для Year-Month-Day Hour:Minute:Second можно оставить * # Пример для запуска в каждый вечер пятницы: # OnCalendar= Fri *-*-* 18:00:00 # справка о формате времени - man 7 systemd.time .... |
Монотонные таймеры
Блок кода | ||
---|---|---|
| ||
....
[Timer]
<Событие> = <интервал>
# Перечень событий:
# OnActiveSec - старт текущего юнита таймера
# OnBootSec - после загрузки ОС
# OnStartupSec - после начала сеанса текущего пользователя
# OnUnitActiveSec - при старте юнита службы
# OnUnitInactiveSec - при завершении работы юнита службы
# Пример:
# OnActiveSec=50minutes
....
|
Перед запуском таймера необходимо перезагрузить systemd:
Command |
---|
|
Имя и краткое описание таймера
Description=
[Timer]
# Формат <Событие>=<интервал>. В указанном примере таймер сработает через 50 минут после собственного запуска
OnActiveSec=50minutes
# Здесь указывается имя юнита службы
Unit=Example.service
# Необязательные параметры
Persistent=true
AccuracySec=1h
WakeSystem=30s
# Необязательная для таймеров секция
[Install]
WantedBy=timers.target
|
Перечень возможных значений параметра <Событие>
, с момента которых ведется отсчёт времени таймером:
- OnBootSec — можно считать, что отсчет времени ведется с момента начала отсчета времени ядром. Контролируемый юнит выполняется однократно. Если при создании таймера указанное время прошло — то контролируемый юнит выполняется немедленно.
- OnStartupSec — отсчет с момента запуска службы systemd. Для системных таймеров параметр близок к параметру OnBootSec, так как системная служба контроля таймеров при загрузке системы стартует как можно раньше. Для пользовательских таймеров отсчет ведется от момента запуска пользовательской службы контроля таймеров, которая запускается при первом входе пользователя. Контролируемый юнит выполняется однократно. Если при создании таймера указанное время прошло — то контролируемый юнит выполняется немедленно.
- OnActiveSec— отсчет от момента активации таймера.
- OnUnitActiveSec — отсчет от старта контролируемого юнита службы. Для начала отсчета юнит службы должен быть запущен принудительно.
- OnUnitInactiveSec — отсчет от завершения работы отслеживаемого юнита службы. Для начала отсчета юнит службы должен быть запущен принудительно.
- OnClockChange, OnTimezoneChange — при значении
true
событием считается изменение показаний системных часов реального времени (CLOCK_REALTIME) относительно показаний монотонных часов (CLOCK_MONOTONIC) или изменение временной зоны.
Перечень значений параметра <интервал>
задается указанием временного промежутка (15m
— 15 минут, 1h
) подробнее см. man systemd.time
Запуск и отладка таймера
Перед запуском таймера необходимо:
- Перезагрузить конфигурацию служб
systemd
:Command sudo systemctl daemon-reload
- Проверить юниты на наличие синтаксических ошибок:
Command systemd-analyze verify <имя_юнита>
.timer # или .service
- Запустить таймер
- :
Command sudo systemctl start
<имя_таймера>.timer
title | Пример создания таймера |
---|
Информация |
---|
Сценарий необходимо выполнять с правами администратора |
Блок кода | ||
---|---|---|
| ||
#!/bin/bash
# параметр для отладки сценария
set -e
#создаем файл службы .service
echo "[Unit]
Description=My test unit # имя и описание службы
Type=oneshot # тип службы, указан oneshot, без порождения подпроцессов для упрощения взаимодействия с таймерами
[Service]
ExecStart=/usr/bin/echo "Привет мир"
[Install]
WantedBy=multi-user.target
" > /etc/systemd/system/test.service
#создаем файл службы .timer
echo "[Unit]
Description=My test timer
Requires=test.service
[Timer]
Unit=test.service
OnActiveSec=5minutes
Persistent=true
[Install]
WantedBy=timers.target
" > /etc/systemd/system/test.timer
# добавим созданные юниты в автозагрузку и запустим их
systemctl enable test.service
systemctl enable test.timer
systemctl start test.service
systemctl start test.timer
|
Проверка тестового таймера:
Title | sudo systemctl status test.service |
---|
○ test.service - My test unit # имя и описание службы
Loaded: loaded (/etc/systemd/system/test.service; enabled; preset: enabled)
Active: inactive (dead) since Mon 2024-11-11 13:55:11 MSK; 10min ago
Duration: 3ms
TriggeredBy: ● test.timer
Временные таймеры
Временные таймеры создаются с помощью команды systemd-run
:
Command |
---|
sudo |
Process: 4011 ExecStart=/usr/bin/echo Привет мир (code=exited, status=0/SUCCESS)
Main PID: 4011 (code=exited, status=0/SUCCESS)
CPU: 3ms
ноя 11 13:55:11 pcmk-1 systemd[1]: Started test.service - My test unit # имя и описание службы.
ноя 11 13:55:11 pcmk-1 echo[4011]: Привет мир
ноя 11 13:55:11 pcmk-1 systemd[1]: test.service: Deactivated successfully.
Временное выполнение таймера
Чтобы инициировать таймер, который будет работать только пока существует текущий сеанс, выполнить:
Command |
---|
systemd-run --<событие>="время" --unit="название службы"<название_таймера>" <команда> |
При выполнении команды автоматически создаются:
- юнит службы
<название_таймера>
.service
; - юнит таймера
<название_таймера>
.timer.
Опции команды Где:
--<событие>
это — одно из событий срабатывания таймера (см Монотонные таймеры), аналоги событий, задаваемых параметрами постоянных таймеров:
--on-boot
—OnBootSec;
--on-active
OnActiveSec
;--on-startupstartup
—OnStartupSec
;--on-unit-active
—OnUnitActiveSec
;--on-unit-inactive
—OnUnitInactiveSec
;--on-calendar
Command |
---|
|
—
OnCalendar
.
Пример:Где параметр --user
запускает таймер от имени текущего пользователя.
Раскрыть | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
Временный таймер, который делает каждую минуту выполняет команду "
Где Содержимое текстового файла с записямиСодержимое файла:
|
Принудительный останов временного таймера:
Command |
---|
|
Временные таймеры хранятся в каталоге /run/systemd/transient
если заданы без параметра --user
или в /run/user/<идентификатор_пользователя>/systemd/transient
. Идентификатор пользователя доступен по команде id -u
Справка по systemd-run
см. 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 |
---|
|
Чтобы ограничить вывод записей определенным интервалом, используется параметры -S
и -U (от и до), пример:
Command |
---|
|
Информация |
---|
Anacron использует таймеры systemd . Следует различать параметрыпараметры |
или конретным конкретным интервалом (пример - день назад):
Command |
---|
|
Справка для journalctl
доступна по команде man
, краткая справка по параметрам - journalctl
journalctl -h
Начиная с очередного обновления 1.7 в Astra Linux Special Edition просмотр журналов юнитов возможен из графического интерфейса через Журнал аудита.