Systemd — описание, список основных команд

15. 12. 2013

Systemd (system daemon) —  система инициализации, пришедшая на смену init (initialization), помимо init и systemd существуют другие, но они менее популярны. Разработан для улучшения работы зависимостей между службами. Позволяет делать больше одновременной работы при загрузки системы, тем самым уменьшает время загрузки.

Systemd

systemd

Главные разработчики Кей Сиверс и Леннарт Поттеринг. Свободное программное обеспечение под лицензией GNU Lesser General Public License. Изначально разработан исключительно для ядра linux и не может использоваться в BSD-системах.

Система инициализации — набор скриптов, которые выполняются при загрузке системы.

units

В systemd есть понятие units (единицы), каждый units может взаимодействовать друг с другом.

Виды units:

  • service — запускает, останавливает или перезагружает демоны, также можно запускать SysV-сценарии.
  • socket — конфигурационный файл сокета, который связанный с определенным сервисом (service)
  • device — конфигурационный файл содержащий правило udev для обработки дерева устройств.
  • mount — монтирования файловой системы. Также можно получить информацию о файловой системы из файла /etc/fstab.
  • automount — автоматическое монтирование файловой системы.
  • target — логическая группировка единиц, ссылается на другие единицы. Например, bluetooth.target — запускает службы, при активации Bluetooth-устройства.
  • snapshot — создание ссылок на другие единицы, восстанавливает список ранее запущенных служб.
  • timer — подобие сron, активация единиц по таймеру.
  • swap — управление файлами подкачки.
  • path — активация других служб на основе inotify

Основные команды systemd

Список запущенны юнитов:

# systemctl

Юниты, запуск которых завершился неудачей:

# systemctl --failed

Список доступных юнитов:

# systemctl list-unit-files

Запуск юнита:

# systemctl start <unit-name>

Остановка юнита:

# systemctl stop <unit-name>

Перезагрузка юинта:

# systemctl restart <unit-name>

Перезагрузка настроек юнита:

# systemctl reload <unit-name>

Просмотреть статус юнита:

# systemctl status <unit-name>

Проверить разрешен ли запуск юнита при старте системы:

# systemctl is-enabled <unit-name>

Разрешить запуск юнита при старте системы:

# systemctl enable <unit-name>

Запретить запуск юнита при старте системы

# systemctl disable <unit-name>

Перезагрузка systemd с поиском измененных или новых юнитов:

# systemctl daemon-reload

Управление питанием

Перезагрузить компьютер:

# systemctl reboot

Выключить компьютер:

# systemctl poweroff

Спящий режим:

# systemctl suspend

Ждущий режим:

# systemctl hibernate

Гибридный сон (suspend-to-both)

# systemctl hybrid-sleep

Управлением питанием ACPI

Для управления питанием, например действие при закрытой крышки ноутбука, нужно отредактировать файл /etc/systemd/logind.conf:

  • HandlePowerKey: действия при нажатии кнопки питания.
  • HandleSuspendKey: действия при нажатии кнопки спящего режима.
  • HandleHibernateKey: действия при нажатии кнопки ждущего режимаs.
  • HandleLidSwitch: действия при закрытии крышки ноутбука.

Эти переменные могут принимать следующие значения:

  • ignore (пропустить).
  • poweroff (выключить питание).
  • reboot (перезагрузка).
  • halt (завершить работу).
  • suspend (спящий режим).
  • hibernate (ждущий режим).
  • hybrid-sleep (гибридный сон).
  • lock (блокировка).
  • kexec (оперативное переключение между ядрами).

По умолчанию systemd использует следующие значения:

  • HandlePowerKey=poweroff
  • HandleSuspendKey=suspend
  • HandleHibernateKey=hibernate
  • HandleLidSwitch=suspend

Для вступления изменений в силу, выполним команду:

# systemctl restart systemd-logind

Журнал (ведение, чтение логов)

Для регулирования размера файла логов, нужно отредактировать /etc/systemd/journald.conf

SystemMaxUse=100M

По умолчанию размер файла логов ограничен в 10% от размера файловой системы где он расположен (/var/log/journal)

Чтение всех логов:

# journalctl

Логи с момента запуска системы:

# journalctl -b

Если был крах системы, можно ввести параметр -1 и посмотреть логи с предыдущего запуска системы (-2 с двух предыдущих и.т.д):

# journalctl -b -1

Вывод последней записи:

# journalctl -f

Все сообщение конкретной утилиты, например systemd:

# journalctl /usr/lib/systemd/systemd

Все сообщения конкретного процесса:

# journalctl _PID=1

Все сообщения конкретного юнита:

# journalctl -u netcfg
  • AlekseyShi

    А где хранится лог который выводится на экран если quiet отсутствует?

    Там строки с сообщениями [ OK ].

  • ex0

    А где можно посмотреть подробное описание каждого юнита?

  • Сергей Авраменко

    А как можно сменить имя юнита? Мне чтобы перезапустить cups приходится писать: systemctl restart org.cups.cupsd.service.d, а хотелось бы: systemctl restart cups

    Спасибо.

    • Malody

      Это можно сделать при помощи псевдонимов (алиасов). Если у вас Bash то добавьте в ~/.bashrc следующую строку:

      alias systemctl restart cups="systemctl restart org.cups.cupsd.service.d"

      можно и так:

      alias srcs="systemctl restart org.cups.cupsd.service.d"

      Теперь при выполнении команды srcs выполнится то что вам надо 😉

      • Сергей Авраменко

        Спасибо.