https://linux-notes.org/pishem-systemd-unit-fajl/
После загрузки кернел запускает /sbin/init АКА systemd
/sbin/init -> ../usr/lib/systemd/systemd
systemd загружает описание сервисов, таргетов и т.д. из unit-файлов в каталогах
/etc/systemd/system/ и /usr/lib/systemd/system/
target == список/комплект желаемых севисов
и запускает все, что определяется таргетом default.target
Обычно default.target -> /usr/lib/systemd/system/graphical.target
multi-user.target == соответствует многопользовательскому режиму без графики
graphical.target == multi-user.target + display-manager.service
# Сменить дефолтный таргет на постоянку:
systemctl set-default multi-user.target # загружаться в текстовый login
systemctl set-default graphical.target # загружаться в графический login
Чтоб при загрузке разово попасть в альтернативный (не дефолтный таргет)
в строку начальной загрузки добавить что-то типа:
systemd.unit=multi-user.target
systemctl status serv-name # Статус сервиса
systemctl show serv-name # Полное описание сервиса
journalctl -u serv-cename -f # Логи сервиса
systemctl start serv-name # Старт / стоп
systemctl stop serv-name
systemctl enable serv-name # Поставить на автостарт при загрузке
systemctl disable serv-name
systemctl cat serv-name # Посмотреть unit-файл сервиса
systemctl daemon-reload # Перечитать конфиги и unit'ы если они менялись
Пример простого unit-файла для сервиса
# /etc/systemd/system/squid_proxy.service
[Unit]
Description=SSH Port Forwarding to 110:1110, 3128:3128 from 2022:22
After=network.target squid
[Service]
User=ivanov
# Переменные окружения можно задать Environment= или всосать из файла
Environment=APP_USER=ivanov
EnvironmentFile=/home/ivanov/service.conf
ExecStart=/home/${APP_USER}/bin/squid_proxy host.ru
ExecStop=/home/${APP_USER}/bin/squid_proxy --stop %H %n
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=15
[Install]
WantedBy=multi-user.target
#############################################################
Директивы в Unit-файлах для systemd
systemd.unit(5)
systemd.service(5)
After,Before последовательность запуска при _одновременном_ старте
Wanted= попытается запустить желаемое, если не получится - не страшно
Requires= запустит желаемое, если не получится - отменит свой запуск
В секции [Install] # При enable сервис залинкуют в multy-user.target.wants
WantedBy=multy-user.target
Restart= no|on-success|on-failure|on-abnormal|on-watchdog|on-abort|always
RestartSec=15
Список поиска unit-файлов (на сам деле он гораздо длиннее)
/etc/systemd/system/
/usr/lib/systemd/system/
%H %l Hostname и ShortHostname
%n %N Full Unit Name и unit-name без суффикса
$MAINPID PID сервиса; используется в ExecStop= ExecReload=
$SERVICE_RESULT Результат завершения сервиса; особенно полезен в ExecStopPost=
$EXIT_CODE Способ завершения процесса: code, signal или пусто
$EXIT_STATUS Код выхода или номер сигнала
systemd-path search-binaries-default # посмотреть путь поиска для ExecStart
ExecSearchPath=/opt/my-app/bin:/usr/local/bin # задать свой путь поиска
Редактирование системного unit-файла
Обычно они лежат в /usr/lib/systemd/system/ и могут обновляться при апдейтах.
# systemctl cat sluzhba.service
1. Копируем unit в /etc/systemd/system и редактируем как нам угодно
# systemctl cat sluzhba.service > /etc/systemd/system/sluzhba.service
# vi /etc/systemd/system/sluzhba.service
либо воспользовавшись командой
# systemctl edit --full myapp.service
2. Создаем "drop-in" директорию сервиса и кладем в нее файлы.conf с поправками
# mkdir /etc/systemd/system/sluzhba.service.d
Пример /etc/systemd/system/sluzhba.service.d/050add.conf
[Unit]
# директивы будут добавлены к оригинальному unit-файлу
After=memcached.service
Requires=memcached.service
# Чтоб не добавить а заменить, сперва обнуляем директиву
AssertPathExists=
AssertPathExists=/srv/www
[Service]
PrivateTmp=yes
либо командой edit все незакомментированные строки попадут drop-in
# systemctl edit myapp.service
Популярность: 14, Last-modified: Thu, 03 Sep 2026 06:58:14 GmT