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