Оглавление |
---|
Информация | ||
---|---|---|
| ||
Накопители информации с твердотельными носителями информации (SSD): особенности применения |
Информация | ||
---|---|---|
| ||
|
Аннотация
Cron
запускается один раз при загрузке системы. Редактирование списка заданий рекомендуется выполнять при помощи команды:Command |
---|
sudo crontab -e |
Справка по командам доступна в
Управление заданиями службы возможно из графического интерфейса через Планировщик задач.
Systemd
оперирует специально оформленными файлами конфигурации— юнитами (unit
). Каждый юнит отвечает за конкретную службу (*.service
), точку монтирования (*.mount
), устройство (*.device
), файл подкачки (*.swap
), сокет (*.socket
) и т. д. Юниты systemd
имеют фиксированный набор параметров, оформленных в виде параметров команды systemctl
(start, stop, reload, restart
и т.д.).
Различия таймеров и заданий cron
Основные причины для применения таймеров вместо заданий cron
:
Информация Для каждого таймера создается отдельный файл журнала
journalctl
Информация |
---|
Создание таймеров
По умолчанию файлы с юнитами , включая юниты с монотонными таймерами и таймерами реального времени распологаются в каталоге
/etc/systemd/system
. Файл с юнитом таймера содержит ссылку на файл с юнитом службы
Информация |
---|
Общая структура юнитов служб:
Блок кода | ||
---|---|---|
| ||
[Unit] Description=this is a test example of the service # имя и описание службы Type=oneshot # тип службы, указан oneshot, без порождения подпроцессов для упрощения взаимодействия с таймерами [Service] Restart=on-failure # перезапуск при сбое, необязательный параметр ExecStart=/usr/local/bin/<имя файла или сценария> # примеры выполняемой команды |
Где:
Example.service
Description
ExecStart
имя исполняемого файла, команды для командной строки, другой службы или сценария.Общая справка доступна по команде man systemd units
. Справка по юнитам служб и параметрам man systemd.service
Управление юнитом службы через таймер
Для запуска юинта службы в файле с юнитом таймера Unit=<имя юнита запускаемой службы>.service
, при этом допускается указание системных служб, перечисленных в
Общая структура юнитов таймеров реального времени:
Блок кода | ||
---|---|---|
| ||
[Unit] Description= # имя и краткое описание таймера [Timer] # Пример для запуска в каждый вечер пятницы OnCalendar= Fri *-*-* 18:00:00 # Здесь указывается имя юнита службы Unit=Example.service # Необязательные параметры Persistent=true AccuracySec=1h WakeSystem=30s # Необязательная для таймеров секция [Install] WantedBy=timers.target |
Где:
- Description
- Unit
.service
Информация Следует различать секцию
[Unit]
определяющую юнит таймера и параметрUnit
, определяющий юнит службы.service
, которым будет управлять таймер OnCalendar
Unit
Общий формат :OnCalendar=DayOfWeek Year-Month-Day Hour:Minute:Second.
Допускается опускать какой либо из промежутков времени указывая вместо них*
.Раскрыть 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 Title systemd-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
с разными интервалами времени и моментами срабатывания- каждое 15 число месяца:
- Persistent
false
- AccuracySec
- WakeSystem
- WantedBy
timers.target
Перечень целевых состояний доступен по команде:
Command |
---|
|
Справка по конфигурированию таймеров доступна по команде man systemd.timer
Блок кода | ||
---|---|---|
| ||
.... [Timer] # Формат <Событие>=<интервал>: OnActiveSec=50minutes # В указанном примере таймер вновь через 50 минут после собственного запуска .... |
Где:
Перечень значений параметра <Событие>, с момента которых ведется отсчёт времени, указанный значением <интервал> таймера:
- OnActiveSec - старт текущего юнита таймера;
- OnBootSec - после загрузки ОС;
- OnStartupSec - после успешной авторизации текущего пользователяуспешного запуска systemd;
- OnUnitActiveSec - при старте отслеживаемого юнита;
- OnUnitInactiveSec - при завершении работы отслеживаемого юнита.
Запуск и отладка таймера
Перед запуском таймера необходимо перезагрузить systemd:
Command |
---|
|
И проверить юниты на наличие синтаксических ошибок:
Command |
---|
|
Запуск таймера:
Command |
---|
|
Информация |
---|
Временное выполнение таймера
Чтобы инициировать таймер, который будет работать только пока существует текущий сеанс, выполнить:
Command |
---|
sudo systemd-run --<событие>="время" --unit="название службы" |
Где:
--<событие>
это одно из событий срабатывания таймера:
--on-boot
--on-active
с момента запуска самого таймера;Раскрыть title Пример Временный таймер, который создаст файл
foo
c помощью командыtouch
в каталоге/tmp
через 30 секунд после своего старта:Command Title sudo systemd-run --on-active=30 /bin/touch /tmp/foo Running timer as unit: run-u80.timer
Will run service as unit: run-u80.serviceСодержимое каталога
/tmp
после срабатывания таймера:Блок кода title ls /tmp ... foo
--on-startup
— после запуски ОС;Раскрыть title Пример Временный таймер, который перезапускает службу NetworkManager через 5 минут с момента загрузки ОС:
Command Title sudo systemd-run --on-startup=5m systemctl restart NetworkManager Running timer as unit: run-u80.timer
Will run service as unit: run-u80.service--on-unit-active
— момент запуска указанного юнита;Раскрыть title Пример Временный таймер, который запускается через 2 часа после запуска сценария
Command Title sudo systemd-run --on-unit-active=2h /home/user/script.sh Running timer as unit: run-u80.timer
Will run service as unit: run-u80.service--on-unit-inactive
— при завершении работы юнита;Раскрыть title Пример Временный таймер, который запускается через 2 часа с момента завершения сценария:
Command Title sudo systemd-run --on-unit-inactive=2h /home/user/script.sh Running timer as unit: run-u80.timer
Will run service as unit: run-u80.service--on-calendar
— при наступлении определенного времени (см.Таймеры реального времени). Отслеживает системное время.Раскрыть title Пример Временный таймер, который делает запись в текстовый файл каждую минуту:
Command Title systemd-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 |
---|
|
Где параметр --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
выведет информацию обо всех таймерах, определенных в системе.
Пуск, автозапуск, перезапуск, останов, отключение аналогичны командам systemctl
для служб. Справка доступна по команде man systemctl
, краткая по systemctl -h
Просмотр журналов юнитов
Посмотреть записи журнала конкретного юнита:
Command |
---|
|
Чтобы ограничить вывод записей определенным интервалом, используется параметры -S
и -U (от и до), пример:
Command |
---|
|
Информация |
---|
Следует различать параметры |
или конретным интервалом (пример - день назад):
Command |
---|
|
Справка доступна по команде man
, краткая справка по параметрам - journalctl
journalctl -h
Начиная с очередного обновления 1.7 в Astra Linux Special Edition просмотр журналов юнитов возможен из графического интерфейса через Журнал аудита.