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
