flip:linux:systemd
Это старая версия документа!
Содержание
SYSTEMD
Создание сервиса systemd
Каталог с конфигурациями: /etc/systemd/system/
Пример: myservice.service
Проверить синтаксис
systemd-analyze verify /etc/systemd/system/myservice.service
Обновить список конфигураций
systemctl daemon-reload
Включить сервис
systemctl enable myservice
Отключить
systemctl disable myservice
Настройка
Основные параметры [Unit]
(Общие для всех типов unit-файлов)
[Unit] Description=Описание сервиса Documentation=URL или man-страница After=network.target # Запускать после этих юнитов Before=some.target # Запускать перед этими юнитами Requires=postgresql.service # Жёсткая зависимость (если postgresql не запустится, этот сервис тоже не запустится) Wants=redis.service # Мягкая зависимость (сервис попытается запустить redis, но не зависит от его успеха) Conflicts=old_service.service # Сервис не может работать одновременно с old_service
Параметры [Service]
(Специфичные для сервисов)
Тип сервиса
Type=simple # Простой запуск (по умолчанию). systemd считает сервис активным сразу после fork. Type=forking # Для демонов, которые сами форкаются (нужен PIDFile=) Type=oneshot # Для скриптов, которые завершаются (с Optional ExecStop=) Type=notify # Сервис уведомит systemd о готовности (через sd_notify) Type=idle # Запустится, когда система простаивает Type=dbus # Активируется при появлении D-Bus имени Type=exec # Как simple, но ждёт завершения ExecStart= перед запуском других юнитов
Команды
ExecStart=/path/to/bin arg1 arg2 # Основная команда ExecStartPre=/bin/pre-script.sh # Подготовка перед ExecStart ExecStartPost=/bin/after-start.sh # Действия после успешного старта ExecReload=/bin/reload-script # Команда для systemctl reload ExecStop=/bin/cleanup.sh # Команда для остановки ExecStopPost=/bin/after-stop.sh # Действия после остановки
Управление процессом
User=nobody # От имени какого пользователя запускать Group=nogroup # Группа процесса WorkingDirectory=/path/to/dir # Рабочая директория Environment="VAR1=value" # Переменные окружения EnvironmentFile=/etc/conf.d/myenv # Файл с переменными (как source в bash) PIDFile=/run/service.pid # Для Type=forking (указывает на файл с PID) UMask=0022 # Маска прав для файлов Nice=-10 # Приоритет процесса (от -20 до 19) OOMScoreAdjust=-500 # Защита от OOM-killer (меньше – реже убивается)
Рестарт и таймауты
Restart=no # Не перезапускать (по умолчанию) Restart=on-success # Только при успешном завершении (код 0) Restart=on-failure # При ошибке (ненулевой код или сигнал) Restart=on-abnormal # При нестандартном завершении (сигнал) Restart=on-watchdog # При зависании (по watchdog) Restart=always # Перезапускать всегда, даже при ручном stop RestartSec=5s # Пауза перед рестартом (по умолчанию 100ms) TimeoutStartSec=30s # Максимальное время запуска TimeoutStopSec=10s # Максимальное время остановки TimeoutSec=30s # Общий таймаут для старта/останова RuntimeMaxSec=1h # Максимальное время работы сервиса
Лимиты
LimitNOFILE=65536 # Макс. число открытых файлов LimitNPROC=512 # Макс. число процессов LimitCORE=infinity # Макс. размер core-файла MemoryLimit=2G # Лимит оперативной памяти CPUQuota=150% # Лимит CPU (может быть >100% для многопоточности)
Дополнительно
StandardOutput=journal # Куда писать stdout (journal, syslog, file:/path) StandardError=inherit # Куда писать stderr (inherit – как stdout) SyslogIdentifier=myapp # Метка в журнале (по умолчанию – имя сервиса) KillMode=process # Что убивать при остановке (process, mixed, control-group) RemainAfterExit=yes # Считать сервис активным после завершения (для oneshot) SuccessExitStatus=143 # Какие коды считать успешными (помимо 0)
Секция [Install]
(Для systemctl enable
)
[Install] WantedBy=multi-user.target # В какой target добавить сервис Alias=myservice.alias # Альтернативное имя для сервиса RequiredBy=other.target # Обратная зависимость Also=other.service # Дополнительные юниты для включения/выключения
Примеры
Запуск службы x11vnc
nano /etc/systemd/system/x11vncsrv.service
[Unit] # описание Description=X11VNC Server # здесь используется ключи времени с указанием цели или другой службы After=prefdm.service [Service] # от какого пользователя запускать службу, не обязательно User=root # перезапуск службы, не обязательно Restart=on-failure #выполняемая команда ExecStart=/usr/bin/x11vnc -auth /var/run/lightdm/root/:0 -dontdisconnect -usepw -noxfixes -shared -forever -rfbport 5900 -rfbauth /root/.vnc/passwd [Install] # здесь используется ключи времени с указанием цели или другой службы WantedBy=graphical.target
flip/linux/systemd.1743018130.txt.gz · Последнее изменение: 2025/03/26 19:42 — flip