Хотя systemd решает многие проблемы с управлением системой, иногда это также сбивает с толку.
Даже такая простая задача, как перечисление системных сервисов, может заставить вас задуматься.
В этой статье мы покажем вам, как составить список системных служб. Мы также объясним вывод, чтобы вам было легче понять различные состояния служб.
Мы предполагаем, что у вас есть некоторые знания о systemd, но даже если вы этого не сделаете, все будет хорошо.
Сервисы systemd управляются командой systemctl. Если вы запускаете systemctl без каких-либо аргументов, он вызывает подкоманду по умолчанию list-units и перечисляет различные типы системных модулей, таких как службы, сокеты, цели и т. д.
Но ваша цель состоит в том, чтобы перечислить сервисы, чтобы вы указали тип устройства с флагом —type, например:
systemctl --type=service
Вы заметили, что мы не указали подкоманду list-units, потому что она используется по умолчанию? Если вы хотите следовать соглашению, вы также можете указать это. Мы предпочитаем это таким образом, и мы буду следовать этой конвенции в оставшейся части статьи.
systemctl list-units --type=service
В обоих случаях вывод будет одинаковым. По умолчанию эта команда показывает только загруженные и активные службы в алфавитном порядке:
UNIT LOAD ACTIVE SUB DESCRIPTION accounts-daemon.service loaded active running Accounts Service acpid.service loaded active running ACPI event daemon alsa-restore.service loaded active exited Save/Restore Sound Card State apparmor.service loaded active exited Load AppArmor profiles apport.service loaded active exited LSB: automatic crash report generation
Позвольте нам объяснить вывод:
Как видите, вы можете перечислить загруженные сервисы в вашей системе Linux. Но активная служба systemd может быть запущена или может быть закрыта (после успешного запуска).
Активное состояние также может иметь под-статус, например, запущен, завершен и т. д. Вы можете использовать тот же флаг —state с под-состоянием.
Чтобы вывести список запущенных сервисов systemd, используйте такой флаг —state=running:
systemctl list-units --type=service --state=running
Вот пример вывода для моей системы, показывающий некоторые из запущенных сервисов systemd:
UNIT LOAD ACTIVE SUB DESCRIPTION accounts-daemon.service loaded active running Accounts Service acpid.service loaded active running ACPI event daemon avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack bluetooth.service loaded active running Bluetooth service bolt.service loaded active running Thunderbolt system service
По умолчанию команда systemctl отображает только загруженные и активные модули.
Если вы хотите перечислить все загруженные сервисы, включая неактивные, используйте флаг —all:
systemctl list-units --all --type=service
Теперь вы можете увидеть даже неактивные сервисы:
UNIT LOAD ACTIVE SUB DESCRIPTION accounts-daemon.service loaded active running Accounts Service acpid.service loaded active running ACPI event daemon alsa-restore.service loaded active exited Save/Restore Sound Card State alsa-state.service loaded inactive dead Manage Sound Card State (restore and store) anacron.service loaded inactive dead Run anacron jobs apparmor.service loaded active exited Load AppArmor profiles
Если вы хотите увидеть только неактивные услуги, вы можете комбинировать различные флаги , как —all и —state, как это:
systemctl list-units --all --type=service --state=inactive
Как вы можете видеть в выводе, он отображает все неактивные сервисы systemd:
UNIT LOAD ACTIVE SUB DESCRIPTION alsa-state.service loaded inactive dead Manage Sound Card State (restore and store) anacron.service loaded inactive dead Run anacron jobs apport-autoreport.service loaded inactive dead Process error reports when automatic reporting is enabled apt-daily-upgrade.service loaded inactive dead Daily apt upgrade and clean activities apt-daily.service loaded inactive dead Daily apt download activities ● auditd.service not-found inactive dead auditd.service
Каждый системный модуль, будь то сервис, сокет или любой другой модуль, имеет файл модуля, который
systemctl list-unit-files --type=service
Вот что вы должны увидеть:
UNIT FILE STATE VENDOR PRESET accounts-daemon.service enabled enabled acpid.service disabled enabled alsa-restore.service static enabled alsa-state.service static enabled alsa-utils.service masked enabled anacron.service enabled enabled apparmor.service enabled enabled apport-autoreport.service static enabled apport-forward@.service static enabled
Объяснение каждого типа состояния будет слишком длинным и не рассматривается в этой статье.
Чтобы увидеть все службы systemd, которые будут запускаться автоматически при каждой загрузке системы, используйте эту команду:
systemctl list-unit-files --type=service --state=enabled
Вы путаете с включенным состоянием? Это нормально. Многие новые пользователи путают включенную системную службу с запущенной службой.
Однако включенная служба systemd означает, что служба будет активирована автоматически при загрузке системы.
UNIT FILE STATE VENDOR PRESET accounts-daemon.service enabled enabled anacron.service enabled enabled apparmor.service enabled enabled autovt@.service enabled enabled avahi-daemon.service enabled enabled binfmt-support.service enabled enabled bluetooth.service enabled enabled console-setup.service enabled enabled containerd.service enabled enabled cron.service enabled enabled cups-browsed.service enabled enabled cups.service enabled enabled dbus-fi.w1.wpa_supplicant1.service enabled enabled
Вы замечаете предустановку поставщика? Это также присутствовало в предыдущем примере.
Предустановка поставщика определяет автоматическое поведение модуля systemd при установке программы.
Предположим, вы установили новую программу XYZ. В этом XYZ есть служба systemd под названием xyz.service с включенной предустановкой поставщика. Это означает, что после установки программы, при загрузке системы, этот xyz.service будет активирован автоматически во время загрузки.
Если предустановка поставщика отключена, вам придется вручную включить ее. Как только он включен, он запускается автоматически при каждой загрузке.
sudo systemd enable xyz.service
До сих пор вы видели различные способы листинга услуг. Но ничто не фокусируется на одном сервисе.
Вы можете получить подробную информацию о сервисе systemd, используя подкоманду systemctl status. Завершение вкладки работает с этой командой.
systemctl status <service_name>
Вот пример со службой сетевого менеджера:
abhishek@itsfoss:~$ systemctl status NetworkManager.service ● NetworkManager.service - Network Manager Loaded: loaded (/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2020-08-02 12:41:22 IST; 6h 3min ago Docs: man:NetworkManager(8) Main PID: 711 (NetworkManager) Tasks: 3 (limit: 9157) Memory: 14.2M CGroup: /system.slice/NetworkManager.service └─711 /usr/sbin/NetworkManager --no-daemon Aug 02 12.42:50 itsfoss NetworkManager[711]: <info> [1595472170.7159] device (wlp58s0): Activation: successful, device activated. Aug 02 12.42:50 itsfoss NetworkManager[711]: <info> [1595472170.7179] manager: startup complete Aug 02 12.42:51 itsfoss NetworkManager[711]: <info> [1595472171.5592] manager: NetworkManager state is now CONNECTED_GLOBAL Aug 02 12.42:52 itsfoss NetworkManager[711]: <info> [1595472172.7973] dhcp6 (wlp58s0): activation: beginning transaction (timeout in 45 seconds) Aug 02 12.42:52 itsfoss NetworkManager[711]: <info> [1595472172.8017] policy: set 'JioFi3_215810' (wlp58s0) as default for IPv6 routing and DNS Aug 02 12.42:52 itsfoss NetworkManager[711]: <info> [1595472172.8058] dhcp6 (wlp58s0): option dhcp6_name_servers => 'fe80::a8dc:79ff:fe1b:57fe' Aug 02 12.42:52 itsfoss NetworkManager[711]: <info> [1595472172.8059] dhcp6 (wlp58s0): state changed unknown -> bound Aug 02 12.42:59 itsfoss NetworkManager[711]: <info> [1595472179.9251] agent-manager: agent[bdd71d4a66098713,:1.84/org.gnome.Shell.NetworkAgent/1> Aug 02 12:42:10 itsfoss NetworkManager[711]: <info> [1595483290.7874] manager: NetworkManager state is now CONNECTED_SITE Aug 02 12:42:11 itsfoss NetworkManager[711]: <info> [1595483291.5893] manager: NetworkManager state is now CONNECTED_GLOBAL
Вы можете видеть, что он предоставляет много полезной информации, такой как состояние службы, справочная страница службы, используемая память, идентификатор процесса и т. д. Он также показывает последние несколько журналов журнала для службы .
Если вы хотите проверить, активен ли сервис в сценарии оболочки, вы можете использовать подкоманду is-active. Выход для активного.
systemctl is-active application.service
Аналогично, если вы хотите проверить, включена ли служба (настроена ли она на автоматический запуск во время загрузки), вы можете использовать подкоманду is-enabled. Выход для включенного сервиса.
systemctl is-enabled application.service
Мы думаем, что теперь у вас есть лучшее понимание перечисления сервисов systemd. Мы надеемся, что вы узнали немного нового о командах systemd и systemctl.
Не стесняйтесь оставлять свои отзывы, вопросы или предложения в разделе комментариев.