systemd — шпаргалка

Самому то же писать лень, нашёл похожие материалы на разных сайтах, ссылки на них ниже.
Шпаргалка по systemd (systemctl)
Как запустить сервисы Systemd без пользователя root / sudo

Шпаргалка по systemd (systemctl)

Запуск/остановка/включение/отключение сервиса:

systemctl start sshd
systemctl stop sshd
systemctl enable sshd
systemctl disable sshd

Статус сервиса и список сервисов

systemctl list-unit-files
systemctl list-units
systemctl status sshd
journalctl -xe

Как изменить скрипты запуска systemd

Основные каталоги, где хранятся юниты:

/usr/lib/systemd — тут хранятся юнит-файлы, которые установлены из пакетов
/etc/systemd — сдесь ссылки на вышеуказанные юнит-файлы, а так-же юнит-файлы, кторые создает пользователь.
Свои юнит-файлы следует класть в папку /etc/systemd/system

Если нам не нравится юнит-файл, который был поставлен из пакета, его можно изменить двумя способами:

полное owerride:

Копируем юнит-файл из /usr/lib/systemd/system в /etc/systemd/system и правим как хотим. Файл в /etc/systemd/system полностью заменяет (т.е. он главнее), файл в /usr/lib/systemd/system. Миннус — при апгрейде новый юнит файл, который из пакета не будет применен, а там могут оказаться важные опции без которых новая версия не стартует.

частичное owerride:

Cоздаем папку /etc/systemd/system/<имя_юнита>.service.d/ в этой папке делаем файл override.conf, в котором указываем только те опции, которые хотим изменить.

Тут есть нюансы!

В файле override.conf кроме самих опций нужно указать имя раздела
Для опций, которые могут быть объявлены много раз (ExecStart, After, Environment), нужно сперва очистить содержимое.

Пример override.conf для юнита sshd, если мы хотим включить режим debug:

[service]
    ExecStart=
    ExecStart=/usr/sbin/sshd -d -D $OPTIONS

После внесения изменений нужно их загрузить командой:

systemctl daemon-reload

Отобразить содержимое юнита:

systemctl cat sshd

Изменить содержимое юнита можно так-же командой:

systemctl edit sshd

команда откроет файл override.conf в редакторе vi

Как создать скрипт запуска systemd

Пример юнит-файла /etc/systemd/system/rclocal.service

[Unit]
    Description=/etc/rc.local Compatibility
    ConditionFileIsExecutable=/etc/rc.local

[Service]
    Type=simple
    ExecStart=/etc/rc.local
    Restart=always
    StandardOutput=journal
    # WorkingDirectory=/tmp
    # Environment=TERM=LD_LIBRARY_PATH="/usr/local/lib"


[Install]
WantedBy=multi-user.target

Как запустить сервисы Systemd без пользователя root / sudo

В качестве примера — синхронизатор syncthing.

mkdir -p  ~/.config/systemd/user/
vim  ~/.config/systemd/user/syncthing.service
[Unit]
    Description=Syncthing - Open Source Continuous File Synchronization
    Documentation=man:syncthing(1)
[Service]
    ExecStart=/usr/local/bin/syncthing -no-browser -no-restart -logflags=0
    Restart=on-failure
    SuccessExitStatus=3 4
    RestartForceExitStatus=3 4
    # Hardening
    SystemCallArchitectures=native
    MemoryDenyWriteExecute=true
    NoNewPrivileges=true
[Install]
    WantedBy=default.target
systemctl --user daemon-reload
systemctl --user list-unit-files syncthing.service
systemctl --user enable --now syncthing.service
systemctl --user enable syncthing.service
systemctl --user status syncthing.service 

Leave a Reply