flip:linux:systemd
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
flip:linux:systemd [2025/03/26 19:06] – flip | flip:linux:systemd [2025/03/31 15:17] (текущий) – flip | ||
---|---|---|---|
Строка 5: | Строка 5: | ||
Каталог с конфигурациями: | Каталог с конфигурациями: | ||
Пример: | Пример: | ||
+ | |||
+ | |||
+ | ===== Проверить синтаксис ===== | ||
+ | |||
+ | < | ||
+ | systemd-analyze verify / | ||
+ | </ | ||
Строка 20: | Строка 27: | ||
</ | </ | ||
- | Отключить | + | |
+ | ==== Отключить | ||
< | < | ||
Строка 27: | Строка 35: | ||
- | ===== Параметры | + | ===== Настройка ===== |
- | ==== Тело конфигурации | + | ==== Основные параметры [Unit] |
- | ---- | + | (Общие для всех типов unit-файлов) |
- | **[Unit]** \\ | + | < |
- | **Description** – описание | + | [Unit] |
- | **Documentation** – документация | + | Description=Описание |
- | **After** – зависимость, т.е. в данном | + | Documentation=URL или man-страница |
- | **Requires**=nginx.service | + | After=network.target |
- | **Wants** – еще одна | + | Before=some.target |
+ | Requires=postgresql.service | ||
+ | Wants=redis.service | ||
+ | Conflicts=old_service.service | ||
+ | </ | ||
- | **[Service]** \\ | ||
- | **Type** – типы запуска служб \\ | ||
- | **User** - от имени какого пользователя выполняется сервис \\ | ||
- | **Group** - группа, | ||
- | **WorkingDirectory** - рабочая директория службы \\ | ||
- | **EnvironmentFile** – файлы переменного окружения \\ | ||
- | **ExecStart** – полный путь к исполняемому файлу программы с параметрами запуска \\ | ||
- | **ExecReload** – полный пусть к исполняемому файлу программы с параметрами перезапуска программы \\ | ||
- | **KillMode** – указывается как будет завершен процесс. В данному случае параметр process говорит о том что будет закрыт только главный процесс \\ | ||
- | **Restart** – перезагрузка процесса, | ||
- | **RestartSec** – время ожидания через которое процесс должен перезагрузиться \\ | ||
- | **TimeoutSec**=200 - время, сколько ждать перед запуском/ | ||
- | **OOMScoreAdjust**=-100 - запрет на отключение сервиса, | ||
- | **[Install]** \\ | + | ==== Параметры |
- | **WantedBy** – указывает на каком урове запуска стартует сервис, | + | |
- | ---- | + | (Специфичные для сервисов) |
- | ==== Типы запуска служб ==== | + | === Тип сервиса === |
- | * **simple** (по умолчанию) – происходит незамедлительный запуск | + | < |
- | * **forking** – служба | + | Type=simple |
- | * **oneshot** – удобен для скриптов, | + | Type=forking |
- | * **notify** – идентичен параметру simple, но с оговоркой, | + | Type=oneshot |
- | * **dbus** – служба считается | + | Type=notify |
- | * **idle** – откладывается | + | Type=idle |
+ | Type=dbus | ||
+ | Type=exec | ||
+ | </ | ||
+ | === Команды === | ||
- | ==== Ключи времени | + | < |
+ | ExecStart=/ | ||
+ | ExecStartPre=/ | ||
+ | ExecStartPost=/ | ||
+ | ExecReload=/ | ||
+ | ExecStop=/ | ||
+ | ExecStopPost=/ | ||
+ | </ | ||
- | * **Wants** - Ожидает | + | === Управление процессом === |
- | * **Requires** - Требует | + | |
- | * **Before** - Перед | + | |
- | * **After** - После | + | |
- | * **WantedBy** - Ожидается | + | |
- | * **RequiresBy** - Требуется цель/ | + | |
+ | < | ||
+ | User=nobody | ||
+ | Group=nogroup | ||
+ | WorkingDirectory=/ | ||
+ | Environment=" | ||
+ | EnvironmentFile=/ | ||
+ | PIDFile=/ | ||
+ | UMask=0022 | ||
+ | Nice=-10 | ||
+ | OOMScoreAdjust=-500 | ||
+ | </ | ||
- | ==== Параметры перезапуска службы ==== | + | === Рестарт и таймауты === |
- | * **no** - никогда | + | < |
- | * **always** - всегда | + | Restart=no # Не перезапускать (по умолчанию) |
- | * **on-success** - успешно | + | Restart=on-success |
- | * **on-failure** - не успешно | + | Restart=on-failure |
- | * **on-abnormal** - не нормальный | + | Restart=on-abnormal |
- | * **on-abort** - при прирывании | + | Restart=on-watchdog |
- | * **on-watchdog** - Сторожевой | + | Restart=always |
+ | RestartSec=5s | ||
+ | TimeoutStartSec=30s | ||
+ | TimeoutStopSec=10s | ||
+ | TimeoutSec=30s | ||
+ | RuntimeMaxSec=1h | ||
+ | </ | ||
- | ^ Restart settings/ | + | === Лимиты |
- | | Clean exit code or signal \\ Корректый код выхода | + | |
- | | Unclean exit code \\ Неккоректный код выхода | | X | | X | | | | | + | |
- | | Unclean signal \\ Некорректный сигнал | | X | | X | X | X | | | + | |
- | | Timeout | | X | | X | X | | | | + | |
- | | Watchdog \\ Сторожевой таймер | | X | | X | X | | X | | + | |
+ | < | ||
+ | LimitNOFILE=65536 | ||
+ | LimitNPROC=512 | ||
+ | LimitCORE=infinity | ||
+ | MemoryLimit=2G | ||
+ | CPUQuota=150% | ||
+ | </ | ||
- | ==== Список целей ==== | + | === Дополнительно |
- | | + | < |
- | * **graphical.target** - запуск графической подсистемы | + | StandardOutput=journal |
- | * **multi-user.target** - запуск консоли | + | StandardError=inherit |
- | * **network-online.target** - ожидание подключенной | + | SyslogIdentifier=myapp |
- | * **network.target** - сеть | + | KillMode=process |
- | * **network-pre.target** - запуск до настройки сети | + | RemainAfterExit=yes |
- | * **boot-complete.target** - успешная загрузка | + | SuccessExitStatus=143 |
+ | </ | ||
+ | |||
+ | |||
+ | ==== Секция [Install] ==== | ||
+ | |||
+ | (Для '' | ||
+ | |||
+ | < | ||
+ | [Install] | ||
+ | WantedBy=multi-user.target | ||
+ | Alias=myservice.alias | ||
+ | RequiredBy=other.target | ||
+ | Also=other.service | ||
+ | </ | ||
Строка 132: | Строка 169: | ||
# здесь используется ключи времени с указанием цели или другой службы | # здесь используется ключи времени с указанием цели или другой службы | ||
WantedBy=graphical.target | WantedBy=graphical.target | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Создание пользовательской службы ===== | ||
+ | |||
+ | * Пользовательские сервисы работают с ключом ''< | ||
+ | * Они выполняются с правами текущего пользователя | ||
+ | * Для некоторых операций (например, | ||
+ | * Логи можно просматривать через ''< | ||
+ | |||
+ | ==== Создание структуры каталогов ==== | ||
+ | |||
+ | Сначала создайте необходимые каталоги в вашей домашней директории | ||
+ | |||
+ | < | ||
+ | mkdir -p ~/ | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Создание unit-файла ==== | ||
+ | |||
+ | |||
+ | Создайте файл сервиса в этом каталоге, | ||
+ | |||
+ | < | ||
+ | nano ~/ | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Активация пользовательского менеджера systemd ==== | ||
+ | |||
+ | Перед использованием убедитесь, | ||
+ | |||
+ | < | ||
+ | systemctl --user enable --now dbus.service | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Управление сервисом ==== | ||
+ | |||
+ | < | ||
+ | # Перечитать конфигурации | ||
+ | systemctl --user daemon-reload | ||
+ | |||
+ | # Включить автозагрузку сервиса | ||
+ | systemctl --user enable myservice.service | ||
+ | |||
+ | # Запустить сервис | ||
+ | systemctl --user start myservice.service | ||
+ | |||
+ | # Проверить статус | ||
+ | systemctl --user status myservice.service | ||
+ | |||
+ | # Остановить сервис | ||
+ | systemctl --user stop myservice.service | ||
+ | |||
+ | # Отключить автозагрузку | ||
+ | systemctl --user disable myservice.service | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Автозапуск при входе пользователя ==== | ||
+ | |||
+ | По умолчанию пользовательские сервисы не запускаются при загрузке системы, | ||
+ | |||
+ | Для включения постоянной работы | ||
+ | |||
+ | < | ||
+ | sudo loginctl enable-linger username | ||
</ | </ | ||
flip/linux/systemd.1743016010.txt.gz · Последнее изменение: 2025/03/26 19:06 — flip