Знание должно быть доступно!

Путь /ОС/Linux

1. Что за зверь systemd?

systemd - вождь всех демонов в GNU/Linux. Он:

  • поднимает юниты (службы, таймеры, сокеты);

  • решает зависимости;

  • даёт лог через journalctl;

  • заменяет init, cron, inetd.

Орки любят systemd, потому что он как боевой шаман: один командует всем племенем процессов.

2. Что такое юнит?

Юнит = текстовый файл .service / .timer / .socket / .target.
Лежат в /usr/lib/systemd/system/ или ~/.config/systemd/user/.

Пример - сервис:

[Unit]
Description=Боевой демон

[Service]
ExecStart=/usr/bin/orc-daemon
Restart=always

[Install]
WantedBy=default.target

3. Основные секции

  • [Unit] - описание и зависимости.

  • [Service] - что и как запускать.

  • [Install] - к чему прицепить при enable.

  • Дополнительно: [Timer], [Socket], [Path], [Target].


4. Директивы, что каждый орк обязан знать

[Unit]
Description=   # коммент
After=foo.service   # после
Wants=bar.target    # мягкая связь

[Service]
ExecStart=/cmd args # что запускать
ExecStartPre=/bin/sleep 5 # задержка
Restart=on-failure  # рестарт при падении
Environment=VAR=orc
Type=simple         # тип демона

[Install]
WantedBy=default.target

5. Targets - тотемы

default.target → твой юзерский дефолт.
graphical.target → когда графика поднята.
multi-user.target → консольный уровень.
graphical-session.target → у DE (GNOME/KDE).
Можно делать свои (xsession.target для i3).


6. systemctl - боевой топор

systemctl status foo.service      # статус
systemctl start foo.service       # запустить
systemctl stop foo.service        # остановить
systemctl restart foo.service     # рестарт
systemctl enable foo.service      # автозапуск
systemctl disable foo.service     # убрать
systemctl -user …                # юзерский режим

  1. journalctl - шаманский барабан

journalctl -u foo.service         # логи юнита
journalctl -xe                    # последние ошибки
journalctl -user -u foo.service  # юзер-юнит

8. Таймеры вместо cron

foo.timer + foo.service.

[Unit]
Description=Будильник

[Timer]
OnBootSec=10min
OnUnitActiveSec=1h

[Install]
WantedBy=timers.target

Проверка:

systemctl list-timers

9. Сокеты и ленивый старт

Можно сделать .socket, который слушает порт, и .service, который оживает при коннекте. Экономия ресурсов, как орк спящий до боя.

10. Советы юного орка

  • Не бойся systemctl edit --user foo.service — override хранится в ~/.config/systemd/user.

  • Юнит = просто текстовый файл, редактируй как .ini.

  • Для отладки: systemd-analyze verify foo.service.

  • Не делай костылей со sleep, если можно подвязать через After=/Wants=.

⚡ Итог: systemd = тотемный шаман Linux. Изучи его магию - и ты сможешь приручить любой демон.