Данная статья связана с
Данная статья применима к
- 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
Аннотация
Cron
запускается один раз при загрузке системы. Редактирование списка заданий рекомендуется выполнять при помощи команды:sudo crontab -e
Справка по командам доступна в
Управление заданиями службы возможно из графического интерфейса через Планировщик задач.
Systemd
оперирует специально оформленными файлами конфигурации— юнитами (unit
). Каждый юнит отвечает за конкретную службу (*.service
), точку монтирования (*.mount
), устройство (*.device
), файл подкачки (*.swap
), сокет (*.socket
) и т. д. Юниты systemd
имеют фиксированный набор параметров, оформленных в виде параметров команды systemctl
(start, stop, reload, restart
и т.д.).
Различия таймеров и заданий cron
Основные причины для применения таймеров вместо заданий cron
:
Для каждого таймера создается отдельный файл журнала
journalctl
Создание таймеров
По умолчанию файлы с юнитами , включая юниты с таймерами, распологаются в каталоге
/etc/systemd/system
. Файл с юнитом таймера имеет ссылку на файл с юнитом службы
[Unit] Description= # имя и описание службы Type=oneshot # тип службы, указан oneshot, без порождения подпроцессов для упрощения взаимодействия с таймерами [Service] Restart=on-failure # перезапуск при сбое, необязательный параметр ExecStart=/usr/local/bin/<имя файла или сценария> # примеры выполняемой команды
Общая справка доступна по команде man systemd units
. Справка по юнитам служб и параметрам man systemd.service
Управление юнитом службы через таймер
Для запуска юинта службы в файле с юнитом таймера Unit=<имя юнита запускаемой службы>.service
, при этом допускается указание системных служб, перечисленных в
Общая структура юнитов таймеров (таймер запускает юнит службы):
[Unit] Description= # имя и краткое описание таймера [Timer] # <Событие запуска таймера> - условие, при котором начинается отсчёт таймера # Ссылка на юнит Unit=<имя юнита запускаемой службы>.service # <=здесь указывается имя юнита службы # Необязательные параметры: Persistent=true # выполнить немедленно после старта системы, если предыдущий запуск был пропущен # по умолчанию установлено false AccuracySec=1h # точность выполнения таймера. # Параметр необходим для снижения нагрузки на ресурсы компьютера при одновременном запуске нескольких таймеров # Таймеры будут запускаться в разные моменты времени в пределах указанного диапазона WakeSystem=30s # интервал, через который будет осуществлен вывод ОС из режима ожидания (suspend) после окончания таймера # Необязательная для таймеров секция [Install] WantedBy=timers.target # WantedBy= — указывает на целевое состояние при котором запускается данный юнит. Целевое состояние определяется статусом загруженной ОС
Перечень целевых состояний:
systemctl list-unit-files --type=target
Справка доступна по команде man systemd.timer
Событие запуска таймера
Таймеры реального времени
.... [Timer] OnCalendar= DayOfWeek Year-Month-Day Hour:Minute:Second # параметр для задания таймера реального времени # вместо DayOfWeek указать Sun, Mon, Tue, Wed, Thu, Fri, Sat . Чтобы таймер выполнялся ежедневно, нужно не указывать значение DayOfWeek или указать на его месте Mon..Sun # вместо указания цифр для Year-Month-Day Hour:Minute:Second можно оставить * # Пример для запуска в каждый вечер пятницы: # OnCalendar= Fri *-*-* 18:00:00 # Пример для запуска каждое 15 число месяца: # OnCalendar= *-*-15 ....
Справка о формате времени доступна по команде man 7 systemd.time
Монотонные таймеры
.... [Timer] <Событие> = <интервал> # Перечень значений параметра <Событие>, с момента которых ведется отсчёт времени, указанный значением <интервал> таймера: # OnActiveSec - старт текущего юнита таймера # OnBootSec - после загрузки ОС # OnStartupSec - после начала сеанса текущего пользователя # OnUnitActiveSec - при старте юнита # OnUnitInactiveSec - при завершении работы юнита # Пример указания <Событие> = <интервал> : # OnActiveSec=50minutes # В указанном примере таймер сработает вновь через 50 минут после собственного запуска ....
Перед запуском таймера необходимо перезагрузить systemd:
systemctl daemon-reload
И проверить юниты на наличие синтаксических ошибок:
systemd-analyze verify <имя_юнита>
Запуск таймера:
systemctl start
<имя_таймера>
Временное выполнение таймера
Чтобы инициировать таймер, который будет работать только пока существует текущий сеанс, выполнить:
sudo systemd-run --<событие>="время" --unit="название службы"
Где:
--<событие>
это одно из событий срабатывания таймера:
--on-active
с момента запуска самого таймера;--on-startup
— после запуски ОС;--on-unit-active
— момент запуска указанного юнита;--on-unit-inactive
— при завершении работы юнита;--on-calendar
— при наступлении определенного времени (см.Таймеры реального времени).
Останов временного таймера:
sudo systemctl --user stop run-r81fc2842fa884a639d020dea5faabb9d.timer
Где параметр --user
запускает таймер от имени текущего пользователя, а r81fc2842fa884a639d020dea5faabb9d
- идентификатор таймера. Временные таймеры хранятся в каталоге /run/systemd/transient
если заданы без параметра --user
или в /run/user/<идентификатор_пользователя>/systemd/transient
. Идентификатор пользователя доступен по команде id -u
, файлы временных таймеров, хранящихся в указанных каталогах и в качестве имени используют идентификаторы.
Справка см. man 1 systemd-run
Управление таймерами
- получить список всех таймеров, определенных в системе:
systemctl list-timers --all
- получить список активных таймеров:
systemctl list-timers
- получить информацию о статусе конкретного таймера:
systemctl status <имя_таймера>.timer
указание
systemctl status *timer
выведет информацию обо всех таймерах, определенных в системе.
Пуск, автозапуск, перезапуск, останов, отключение аналогичны командам systemctl
для служб. Справка доступна по команде man systemctl
, краткая по systemctl -h
Просмотр журналов юнитов
Посмотреть записи журнала конкретного юнита:
sudo journalctl -b -u
<имя_юнита> # .service или .timer, параметр -b ограничивает вывод записей текущей загрузкой
Чтобы ограничить вывод записей определенным интервалом, используется параметры -S
и -U (от и до), пример:
sudo journalctl -S
"2024-11-03 07:00:00"
-U
"2024-11-07 07:15:00" -u anacron.timer # имя юнита для примера
Anacron
это вспомогательный инструмент cron
для запуска пропущенных cron
во время отключения компьютера заданий.
Следует различать параметры -u
(юнит) и -U
(до)
или конретным интервалом (пример - день назад):
sudo journalctl -S
-1d
-u anacron.timer
Справка доступна по команде man
, краткая справка по параметрам - journalctl
journalctl -h
Начиная с очередного обновления 1.7 в Astra Linux Special Edition просмотр журналов юнитов возможен из графического интерфейса через Журнал аудита.