Программирование

systemd

Что такое systemd?

systemd написали Lennart Poettering и Kay Sievers. Первый выпуск был в 2010 году. Многие дистрибутивы Linux запускают его при загрузке. Ubuntu среди них. У каждой службы есть файл unit. Чаще всего окончание .service. systemctl start открывает службу сейчас. systemctl enable привязывает её к следующей загрузке. Это не одно и то же. Журнал показывает journalctl. Ядро говорит с железом. systemd держит порядок служб после того, как ядро запустилось. Некоторые системы, например Alpine, его не используют.

Для чего нужен systemd?

systemd нужен, чтобы сайт, база и фоновая программа оставались открытыми.

  • Запускать веб-сервер при загрузке
  • Снова поднять упавшую службу
  • Прочитать последнюю ошибку в журнале
  • Открыть одну службу после другой

Что можно делать с systemd?

Через systemd службу открывают и закрывают, привязывают к загрузке и читают журнал. Код программы он не пишет. Если путь или пользователь неверны, служба падает. start без enable открывает её только сейчас. Когда машина выключается, эта служба сама не возвращается.

Сложно ли освоить systemd?

Одна команда start легка. Трудность в пути внутри файла unit. Если полный путь программы не написан, systemd её не находит. Рабочая папка может быть не папкой твоего терминала. Если restart настроен неверно, упавшая программа открывается снова без паузы и заполняет журнал. Если в Alpine нет systemctl, команда принадлежит другому инструменту.

Плюсы и ограничения

Плюс: порядок загрузки в одном месте, упавшую службу можно поднять, журнал читается отдельно. Ограничение: его нет в каждом Linux, и ошибка unit держит службу тихой. systemd — не ядро и не cron.

Основные понятия

unit — файл службы. start открывает её сейчас. enable записывает её на следующую загрузку.

  • systemctl status показывает состояние
  • journalctl читает журнал
  • .service — самый частый unit
  • Ядро стартует раньше systemd

Короткий пример

Эта команда показывает, открыта ли служба сейчас. Она её не создаёт.

systemctl status nginx

Частые вопросы

  • systemd и ядро Linux — одно и то же? Нет. Ядро говорит с железом. systemd хранит порядок служб.
  • systemd и cron — одно и то же? Нет. cron вызывает команду, когда приходит время. systemd держит службу открытой.
  • start и enable — одно и то же? Нет. start открывает её сейчас. enable привязывает к следующей загрузке.