Инструменты пользователя

Инструменты сайта


os:linux:systemd

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
os:linux:systemd [23.03.2025 08:13] – [systemd] viacheslavos:linux:systemd [30.04.2025 10:57] (текущий) – [Минимальный вариант] viacheslav
Строка 6: Строка 6:
 https://systemd.io/\\ https://systemd.io/\\
 {{ :os:linux:s4a_latest.pdf |systemd для администраторов, русский перевод (Сергей Пташник, 28 октября 2017 г.)}}\\ {{ :os:linux:s4a_latest.pdf |systemd для администраторов, русский перевод (Сергей Пташник, 28 октября 2017 г.)}}\\
 +[[https://habr.com/ru/companies/timeweb/articles/824146/|systemD с 0 до 1: библия сисадмина (Хабр)]]
 ===== Unit-файл ===== ===== Unit-файл =====
 https://www.freedesktop.org/software/systemd/man/systemd.unit.html https://www.freedesktop.org/software/systemd/man/systemd.unit.html
Строка 73: Строка 74:
 </code> </code>
  
 +==== Создать юнит ====
 +<code bash>
 +# Создание пользовательского сервиса и таймера (каталог ~/.config/systemd/user)
 +systemctl edit myservice --user --full --force
 +systemctl edit myservice.timer --user --full --force
 +
 +# Создание системного сервиса и таймера (каталог /etc/systemd/system), нужен рут
 +sudo systemctl edit myservice --full --force
 +sudo systemctl edit myservice.timer --full --force
 +</code>
 +После ''systemctl edit'' делать ''systemctl daemon-reload'' не нужно, в отличие от создания юнита как текстового файла в редакторе.
 ==== Зависимость между юнитами и порядок запуска ==== ==== Зависимость между юнитами и порядок запуска ====
 Перед запуском юнит может ''wants'' или ''requires'' другой юнит. Разница: Перед запуском юнит может ''wants'' или ''requires'' другой юнит. Разница:
Строка 192: Строка 204:
 active # or inactive active # or inactive
 </code> </code>
-===== Таймер для периодического запуска =====+===== systemd.timer ===== 
 Сервис типа oneshot, запускающий скрипт Сервис типа oneshot, запускающий скрипт
 <code ini> <code ini>
Строка 225: Строка 238:
 https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files\\ https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files\\
 https://unix.stackexchange.com/questions/126786/systemd-timer-every-15-minutes\\ https://unix.stackexchange.com/questions/126786/systemd-timer-every-15-minutes\\
 +
 +Для работы нужно 3 компонента: скрипт, сервис systemd для запуска скрипта и таймер systemd для запуска сервиса.\\
 +Скрипт после создания нужно сделать исполняемым - ''chmod +x /scripts/test.sh''
 +
 +<code bash>
 +vi /etc/systemd/system/test.service
 +# Абсолютный минимум для сервиса:
 +[Service]
 +ExecStart=/scripts/test.sh
 +
 +# Вариант создания
 +systemctl edit --force --full test.service
 +# Вариант редактирования
 +systemctl edit --full test.service
 +
 +# Перечитать список сервисов (если редактировалось/создавалось с помощью systemctl edit, то не нужно)
 +sudo systemctl daemon-reload
 +# Можно запускать
 +systemctl start test.service
 +
 +# Логи сервиса test в реальном времени
 +sudo journalctl -u test -f
 +</code>
 +
 +Другие секции конфигурации сервиса
 +<code bash>
 +[Unit]
 +Description=This service runs the script /scripts/test.sh
 +
 +[Service]
 +ExecStart=/scripts/test.sh
 +User=worker # от имени кого будет работать
 +
 +# Если служба запускается по таймеру, секция [Install] не нужна
 +#[Install]
 +#WantedBy=multiuser.target # Если GUI нет
 +#WantedBy=graphical.target # Если это десктоп с GUI
 +</code>
 +
 +Таймер
 +<code bash>
 +# Кладётся в ту же папку, что и сервис
 +vi /etc/systemd/system/test.timer
 +
 +[Unit]
 +Description=This timer starts test.service
 +
 +[Timer]
 +Unit=test.service
 +# [DayOfWeek] Year-Month-Day Hour:Minute:Second
 +OnCalendar=*-*-* 20:15:00
 +Persistent=true # Если срабатывание пропущено, запустить при загрузке системы
 +#OnBootSec=5min # Через 5 мин после загрузки
 +
 +# Секция нужна для того, чтобы таймер можно было бы включить при загрузке системы
 +[Install]
 +WantedBy=timers.target
 +
 +# Перечитать сервисы
 +sudo systemctl daemon-reload
 +# Включить таймер при загрузке системы
 +sudo systemctl enable test.timer
 +
 +# Список таймеров
 +systemctl list-timers
 +</code>
 +[[https://www.youtube.com/watch?v=8640OcCL8T8|Linux Command Line (57) systemd.timer pt1 - MichaelsTechTutorials]]\\
 +[[https://www.youtube.com/watch?v=OV3Gc0SISUo|Linux Command Line (58) systemd.timer pt2 - MichaelsTechTutorials]]\\
 +[[https://habr.com/ru/post/535930/|Systemd для продолжающих. Part 1 — Запуск юнитов по временным событиям]]\\
 +[[https://www.freedesktop.org/software/systemd/man/latest/systemd.time.html|systemd.time — Time and date specifications]]
 +
 +==== Минимальный вариант ====
 +<code bash>
 +mkdir -p ~/.config/systemd/user
 +cd ~/.config/systemd/user
 +loginctl enable-linger $USER
 +
 +### cleanup.service
 +[Service]
 +ExecStart=/home/admin/scripts/cleanup.sh
 +
 +### cleanup.timer
 +# Секция [Install] нужна для автозагрузки таймера
 +[Timer]
 +OnCalendar=*-*-* 2:00:00
 +
 +[Install]
 +WantedBy=timers.target
 +
 +# Шебанг в скрипте обязателен, иначе сервис не поймёт, что именно он запускает
 +### /home/admin/scripts/cleanup.sh
 +#!/bin/bash
 +
 +find /opt/maven_repo/jjj -name 'business-application-*-1-DBI-*' -type f -mtime +5 -delete
 +find /opt/maven_repo/jjj -name 'business-model-*-1-DBI-*' -type f -mtime +10 -delete
 +find /opt/maven_repo/jjj/metamodel-* -name 'metamodel-*-1-DBI-*' -type f -mtime +5 -delete
 +
 +### Запуск, автозагрузка
 +systemctl --user daemon-reload
 +systemctl --user start cleanup.timer
 +systemctl --user enable cleanup.timer
 +</code>
 +
 +==== Срабатывание чаще минуты ====
 +
 +Например, раз в 10 сек
 +<code bash>
 +[Timer]
 +# Каждые 3 минуты
 +# OnCalendar=*:0/3
 +# Каждые 10 сек
 +OnCalendar=*:*:0/10
 +# Обязательный параметр для таймеров меньше минуты
 +AccuracySec=1s
 +
 +[Install]
 +WantedBy=timers.target
 +</code>
 +
os/linux/systemd.1742717602.txt.gz · Последнее изменение: viacheslav

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki