Sorry, you have been blocked
This website is using a security service to protect itself from online attacks. The action you just performed triggered the security solution. There are several actions that could trigger this block including submitting a certain word or phrase, a SQL command or malformed data.
What can I do to resolve this?
You can email the site owner to let them know you were blocked. Please include what you were doing when this page came up and the Cloudflare Ray ID found at the bottom of this page.
Cloudflare Ray ID: 7a2424703b4a2479 • Your IP: Click to reveal 88.135.219.175 • Performance & security by Cloudflare
Список служб Linux с помощью Systemctl
В Linux служба — это программа, работающая в фоновом режиме . Службы можно запускать по запросу или во время загрузки.
Если вы используете Linux в качестве основной операционной системы или платформы разработки, вы будете иметь дело с различными службами, такими как веб-сервер, ssh или cron . Знание того, как перечислить запущенные службы или проверить статус службы, важно при отладке системных проблем.
Большинство последних дистрибутивов Linux используют systemd в качестве системы инициализации и диспетчера служб по умолчанию.
Systemd — это набор инструментов для управления системами Linux. Он используется для загрузки машины, управления службами, автоматического монтирования файловых систем, регистрации событий, настройки имени хоста и других системных задач.
В этой статье объясняется, как составить список служб в Linux.
Список служб Linux
Systemd использует концепцию модулей, которыми могут быть службы, сокеты, точки монтирования, устройства и т. Д. Модули определяются с помощью текстовых файлов в формате ini . Эти файлы содержат информацию об устройстве, его настройках и командах для выполнения. Расширения файлов определяют тип файла модуля. Например, файлы системных сервисных модулей имеют расширение .service .
systemctl — это утилита командной строки, которая используется для управления systemd и службами. Он является частью экосистемы systemd и по умолчанию доступен во всех системах.
Чтобы получить список всех загруженных служебных единиц, введите:
Каждая строка вывода содержит следующие столбцы слева направо:
- UNIT — Название сервисной единицы.
- LOAD — Информация о том, загружен ли файл объекта в память.
- ACTIVE — состояние активации файла модуля высокого уровня, которое может быть активным, перезагружающимся, неактивным, неудачным, активируемым, деактивируемым. Это обобщение столбца SUB .
- SUB — состояние активации файла юнита низкого уровня. Значение этого поля зависит от типа объекта. Например, модуль типа service может находиться в одном из следующих состояний: неработающий, завершенный, сбойный, неактивный или работающий.
- DESCRIPTION — Краткое описание файла объекта.
По умолчанию команда перечисляет только загруженные активные юниты. Чтобы увидеть загруженные, но неактивные модули, передайте параметр —all :
Если вы хотите увидеть все установленные файлы модулей, а не только загруженные, используйте:
Отображение статуса службы
Чтобы проверить статус службы, используйте команду systemctl status :
Где <service_name> — это имя сервисной единицы, которую вы хотите проверить. Например, чтобы определить текущий статус службы nginx, вы должны запустить:
Команда напечатает следующую информацию:
- Loaded — Loaded ли служебный модуль и полный путь к файлу модуля. Он также показывает, разрешен ли запуск устройства во время загрузки.
- Active — активна и работает ли служба. Если ваш терминал поддерживает цвета, а служба активна и работает, точка ( ● ) и часть «активен (работает)» будут напечатаны зеленым цветом. Строка также показывает, как долго работает служба.
- Docs — служебная документация.
- Process — информация о процессах обслуживания.
- Main PID — сервисный PID.
- Tasks — количество задач, учитываемых для объекта, и лимит задач.
- Memory — информация об используемой памяти.
- CGroup — информация о связанных контрольных группах.
Если вы хотите только проверить статус службы, используйте команду systemctl is-active . Например, чтобы убедиться, что служба nginx запущена, вы должны запустить:
Команда покажет вам статус службы. Если служба активна, команда возвращает статус выхода 0, что может быть полезно при использовании команды внутри сценариев оболочки.
Выводы
Мы показали вам, как использовать команду systemctl для systemctl списка служб Linux и проверки их статуса.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии ниже.
10+ commands to list all systemctl services with status
In this tutorial I will share the commands which you can use to list systemctl services along with their state. You can use these methods in scripts to add service status checks to make sure service is in running or failed state.
Are you new to systemd and systemctl?
With RHEL/CentOS 7, now we have services based on systemd and the SysV scripts are deprecated. If you are new to systemd then I would suggest reading this another article where I have done 1:1 comparison between SysV and systemd services.
Now with systemd the traditional Linux commands such as chckconfig , service etc are not supported any more. Although you can still use these commands but they can be removed in upcoming releases.
For example, with RHEL/CentOS 6 we used to use chkconfig to enable or disable service at different run level. Now with RHEL 8 also I see we are allowed to use chkconfig
But the request is internally routed to systemctl . Similarly you can restart a service using traditional command i.e. service <service_name> <action> . For example, to restart sshd :
This request was also transferred to systemctl .
So I hope you understood the point, at the time of writing this article with RHEL 8.1
we are still allowed to use traditional SysV commands but it can be removed in any release now. So I would strongly recommend users to start using systemctl commands as they are very user friendly and powerful tool with the amount of options they support.
systemctl list unit files loaded in memory
List active unit files
First of all we will list all the unit files which are currently available in the memory of our Linux server. This command will list only the active units from the server’s memory:

systemctl list-units
List all the unit files
To list all the units independent of their state add » —all » to this command

systemctl list-units —all
As you can see now it is loading all the unit files including failed , inactive unit files
systemctl list installed unit files
Now list-units shows the list of units which are currently loaded in the memory but not necessarily installed on the server. To view the list of unit files which are currently installed on our server we use:

systemctl list-unit-files
List type of unit files
There can be different types of unit files such as service, socket, mount etc. To further filter the unit files we can add type= argument with list-unit-files . The argument should be a comma-separated list of unit types.
systemctl list services
To list all the installed systemctl services from our Linux server:

systemctl list services
This should give us a complete list of installed services (independent of it’s state)
systemctl list mount files
With systemd all the partitions and file system are mounted as part of mount type unit files. So we can also list all the mount type unit files available on our server using type=mount

systemctl list mount
We can further use this with different other type of unit files such as socket, target etc.
Управление службами Linux
В операционной системе Linux, так же как и в Windows, кроме обычных программ, с которыми может взаимодействовать пользователь есть еще один вид программ. Это работающие в фоне службы. Важность служб тяжело переоценить, они следят за состоянием системы, обеспечивают автоматическое подключение внешних устройств и сети, позволяют процессам взаимодействовать с оборудованием (dbus), а также в виде служб реализованы различные веб-серверы и серверы баз данных.
Поскольку службы выполняются в фоновом режиме, вы не можете взаимодействовать с ними привычными способами. В этой статье мы рассмотрим управление службами Linux. Вы узнаете, как посмотреть запущенные службы Linux, а также останавливать и запускать их самому.
Немного теории
Чтобы всем этим управлять нужна основная служба — система инициализации, которая будет запускать службы Linux в нужный момент, следить чтобы они нормально работали, записывать сообщения логов, и самое главное предоставлять пользователям интерфейс для управления службами. Саму систему инициализации запускает ядро Linux. Сама система инизациализации запускается ядром Linux.
Раньше, для управления службами использовались скрипты. Тогда каждая служба запускалась в фоновом режиме одна за другой, без возможности параллельного запуска. Скрипт инифиализации получал PID процесса для каждой службы, сохранял его и потом с помощью него можно было проверить работает ли служба и остановить службу Linux если это нужно. Все это можно сделать и вручную.
Но потом на смену этому методу пришла новая модель и система инициализации Systemd. Эта система позволяет запускать службы параллельно, поэтому появилась необходимость настраивать зависимости между службами. Таким образом, теперь порядок запуска служб определяет сложное дерево зависимостей. После запуска Systemd собирает весь вывод службы в лог, и следит за ее работой, если служба аварийно завершилась, то автоматически ее перезапускает при необходимости.
Служба в Systemd описывается файлом юнита, в нем описано каким образом эту службу надо запускать, а также как с ней себя вести. Существуют такие типы юнитов:
- service — обычная служба, программа
- target — группа служб
- automount — точка автоматического монтирования
- device — файл устройства, генерируется на этапе загрузки
- mount — точка монтирования
- path — файл или папка
- scope — внешний процесс
- slice — группа системных служб systemd
- snapshot — сохраненное состояние запущенных служб
- socket — позволяет активировать службу по необходимости.
В этой статье мы рассмотрим только только обычные службы, то есть *.service, и совсем немного *.target, но мы перечислили здесь все остальные типы юнитов, чтобы вы смогли взглянуть на картину немного шире.
Ещё у все службы Systemd можно поделить на две группы:
- system — системные службы, запускаемые от имени суперпользователя, файлы таких служб находятся в папке /lib/systemd/system или /usr/lib/systemd/system;
- user — службы, которые с которыми можно взаимодействовать от имени обычного пользователя, их файлы располагаются в /lib/systemd/user или /usr/lib/systemd/user или в домашней папке пользователя $USER/.config/systemd/user.
Кроме того, у Systemd есть задачи (Jobs), они выполняются и видны только когда какой нибудь службе применяется действие, например, запуск или остановка.
Основы рассмотрели, теперь будет настройка служб LInux. Давайте познакомимся с утилитой для управления службами.
Утилита systemctl
В Systemd есть специальный инструмент для управления службами в Linux — команда systemctl. Эта утилита позволяет делать очень много вещей, начиная от перезапуска службы linux и проверки ее состояния, до анализа эффективности загрузки службы. Синтаксис у этой утилиты такой:
$ systemctl опции команда служба служба.
Опции настраивают поведение программы, подробность вывода, команда — указывает что нужно сделать со службой, а служба, это та самая служба, которой мы собираемся управлять. В некоторых случаях утилита может использоваться без указания команды и службы.
Опции очень сильно зависят от команд, поэтому рассмотрим их позже, а пока пройдемся по командам:
- list-units — посмотреть все службы (юниты) которые сейчас загружены в память, аналог опции -t
- list-sockets — посмотреть все сокеты служб, которые сейчас загружены в память
- list-timers — посмотреть список таймеров, загруженных в память
- start — запустить службу linux
- stop — остановить службу linux
- reload — попросить службу перечитать свою конфигурацию из файловой системы
- restart — перезапустить службу
- try-restart — перезапустить службу, только если она запущена
- reload-or-restart — попросить службу обновить свою конфигурацию, если не поддерживается просто выполнить перезапуск службы linux
- isolate — запустить только одну службу вместе с ее зависимостями, все остальные остановить
- kill — отправить сигнал завершения процессу используется вместе с опциями —signal и —kill-who
- clean — удалить все данные, которые касаются указанной службы, сюда входит кэш, логи, данные выполнения
- is-active — проверить запущена ли служба linux
- is-failed — проверить не завершилась ли служба с ошибкой
- status — посмотреть состояние и вывод службы
- show — посмотреть параметры управления службой в Linux
- cat — посмотреть содержимое юнит файла в текстовом виде
- reset-failed — очистить состояние failed для служб, которые завершились с ошибкой
- list-dependencies — посмотреть зависимости службы linux
- list-unit-files — вывести все установленные файлы служб
- enable — добавить службу в автозагрузку
- disable — удалить службу из автозагрузки
- is-enabled — проверить если ли уже служба в автозагрузке
- reenable — сначала выполнить disable потом enable для службы
- list-jobs — все выполняющиеся задачи Systemd.
- snapshot — сохранить состояние служб, чтобы потом восстановить
- daemon-reload — обновить конфигурацию юнитов для всех служб
- mask — сделать юнит недоступным
- unmask — вернуть файл службы linux
- link — добавить юнит файл, который расположен не в стандартной папке для юнитов
- revert — вернуть юнит до состояния по умолчанию
- edit — отредактировать параметры службы не изменяя основной файл юнита.
Команда systemctl поддерживает и другие команды, но в этой статье перечислены только самые популярные.
А теперь основные опции:
- -t, —type — отфильтровать список служб по типу
- —state — отфильтровать список служб по состоянию
- -a, —all — показать все известные службы, даже не запущенные
- -q — минимальный вывод
- —version — версия программы
- —no-pager — не использовать постраничную навигацию
- —no-legend — не выводить подробное описание
Большинство действий выполняются именно командами, а опции только помогают сделать вывод более удобным.
Управление службами Linux
Теперь, когда вы уже знаете все основы, команды и параметры можно переходить к делу. Со всеми остальными тонкостями разберемся по пути.
1. Список запущенных служб
Сначала давайте посмотрим все загруженные в память службы Linux. Для того чтобы отобразить только службы можно использовать фильтр по типу с помощью опции type:
systemctl list-units —type service 
Обратите внимание, что команда не просто выводит текст, она передает этот текст утилите less. Здесь доступна прокрутка вверх и вниз, а также вправо и влево с помощью клавиш стрелок. Для того чтобы выйти обратно в терминал нажмите клавишу q.
Команда отобразила все службы, которые известны systemd, они сейчас запущены или были запущены. Systemd не пересматривает все файлы юнитов при выполнении этой команды. В выводе утилиты есть несколько колонок:
- LOAD — значение loaded означает, что юнит службы был успешно загружен
- ACTIVE — состояние сервиса, позволяет понять запущен он или нет.
- SUB — более подробное состояние службы.
- DESCRIPTION — описание службы.
Дальше больше. Вы можете отфильтровать список служб systemctl по состоянию с помощью опции state. Например, только выполняющиеся:
systemctl list-units —type service —state running 
Или те, которые завершились с ошибкой:
systemctl list-units —type service —state failed 
Для фильтрации можно брать любое значение состояния из колонки ACTIVE или SUB.
2. Список всех служб
В предыдущем пункте было показано как посмотреть список служб, которые уже загружены в память systemd. Но для того чтобы посмотреть все службы необходимо обратиться к файлам юнитов, потому что далеко не все службы загружаются в память.
Для этого понадобится команда list-unit-files. Например, для вывода вообще всех юнитов воспользуйтесь такой командой:
systemctl list-unit-files 
Здесь тоже есть несколько колонок с информацией, в первой колонке выводится добавлен ли юнит в автозагрузку, а во второй должен ли он быть добавлен в автозагрузку по умолчанию. Теперь отфильтруем только службы Linux:
systemctl list-unit-files —type service 
Здесь вы тоже можете использовать фильтры по состоянию, но значения будут уже другие. Теперь вы знаете как посмотреть запущенные службы Linux.
3. Поиск службы по имени
Если вы хотите найти определенную службу, но не знаете её полное имя, то можете использовать фильтр по паттерну. Например, так можно вывести все службы, которые начинаются со слова mysql:
systemctl list-unit-files ‘mysql*’ 
4. Запуск службы
Для того чтобы запустить службу используется команда start. Ей необходимо передать имя службы в качестве параметра:
sudo systemctl start имя_службы.service
Например, для запуска Nginx выполните:
sudo systemctl start nginx.service 
Причем расширение service можно опустить, оно и так подставляется по умолчанию. Если запуск прошел хорошо, программа ничего не выведет.
5. Остановка службы
Остановить службу linux можно командой:
sudo systemctl stop имя_службы.service
Например, для остановки Nginx можно использовать такую команду:
sudo systemctl stop nginx 
Кроме того, вы можете остановить несколько сервисов одной командой используя фильтрацию по паттерну. Например, для остановки всех сервисов, имена которых начинаются с php выполните:
sudo systemctl stop ‘php*.service’
Но это будет работать только для запущенных служб. Запускать службы таким образом нельзя. Сопоставление по паттерну работает только для заруженных в память юнитов, а поэтому невозможно быть уверенным что список для запуска будет полным.
6. Перезапуск службы
Есть два способа перезагрузки служб. Это полная перезагрузка с помощью команды restart, которая включает завершение программы и её запуск, а также так называемая мягкая перезагрузка, когда systemd просит программу перечитать конфигурацию с диска. Такая перезагрузка выполняется с помощью команды reload, однако далеко не все сервисы её поддерживают.
Для полной перезагрузки Nginx выполните такую команду:
sudo systemctl restart nginx
Для того чтобы попросить программу перечитать свою конфигурацию используйте команду reload:
sudo systemctl reload nginx
Если служба не поддерживает этого, вы получите ошибку. Для того чтобы избежать этого и перезапустить службу полностью если мягкая перезагрузка не поддерживается используйте команду reload-or-restart. Например:
sudo systemctl reload-or-restart nginx
7. Состояние службы
Посмотреть состояние службы позволяет команда status:
sudo systemctl status имя_службы
Например, для Nginx:
sudo systemctl status nginx 
Здесь вы можете видеть текущее состояние процесса в поле Active. Возможные значения: active, inactive, failed, etc. Ещё тут выводится статистика по использованию памяти, количеству запущенных процессов и PID основного процесса. А также 10 последних строчек вывода программы, которые очень помогут решить проблему с запуском если она возникнет. Если этих данных вам не достаточно, то вы можете указать количество строк для вывода используя опцию —lines. Например:
sudo systemctl status —lines=50 avahi-daemon
Если на экран не помещается вся строка логов, вы можете использовать стрелки вправо и влево для прокрутки. В некоторых случаях строка может обрезаться по размеру окна терминала. Для того чтобы этого избежать используйте опцию -l:
sudo systemctl status -l nginx
8. Автозагрузка службы
Для того чтобы добавить службу в автозагрузку используйте команду enable. Например, команда добавления Nginx в автозагрузку будет выглядеть вот так:
sudo systemctl enable nginx
А для удаления из автозагрузки используйте команду disable. Например:
sudo systemctl disable nginx
Более подробно об автозагрузке в Systemd вы можете прочитать в статье Автозагрузка сервисов Linux.
9. Редактирование файла службы
Иногда возникает необходимость отредактировать файл службы. Например, для того чтобы добавить дополнительные переменные окружения или настроить автоматический перезапуск. Но редактировать сам файл сервиса в папке /usr/lib или /lib не желательно, поскольку при следующем обновлении пакета он будет перезаписан.
Вы можете скопировать файл юнита в папку /etc/systemd/system/ и редактировать его там. Специально для таких случаев была разработана команда edit. Если её использовать с опцией —full она создаст файл в папке /etc/systemd/* в котором вы можете изменять всё что вам нужно. Например, вы можете выполнить следующую команду для того чтобы отредактировать конфигурационный файл Nginx:
sudo systemctl edit —full nginx
Внесите нужные изменения и сохраните файл. Например, можно добавить переменную окружения SITE со значением losst:
Environment=»SITE=losst»https://losst.pro/wp-content/uploads/2023/01/services-linux-12-919×576.png 
Если же вы выполните команду edit без опции —full, то будет создана папка /etc/systemd/system/nginx.service.d, в которой появится файл override.conf. Здесь нужно разместить только параметры, которые вы хотите добавить или значения которых нужно переопределить Например, для добавления той же переменной окружения нужно добавить такую строку:
sudo systemctl edit nginx Envirnoment=»SITE=losst»
После внесения изменений необходимо обновить конфигурацию Systemd с диска:
sudo systemctl daemon-reload
Затем вы можете перезапустить сервис и убедится, что настройки применились.
10. Удаление службы
Удалить службу можно удалив пакет, вместе с которым она поставляется. Однако если это стандартная служба, то это сделать не получится. Существует способ отключать юниты, если вы не хотите чтобы кто-то их использовал. Это маскировка. Для этого используйте команду mask:
sudo systemctl mask имя_сервиса
Например, для Nginx:
sudo systemctl mask nginx
Эта команда создает в папке /etc/systemd/system символическую ссылку на /dev/null с именем файла службы, после чего служба считается отключённой. Обратите внимание, что если вы редактировали файл юнита и в папке /etc/systemd/system уже существует его файл, то вы можете получить ошибку Failed to mask unit: File /etc/systemd/system/*.service already exists. В таком случае все ваши изменения нужно удалить командой revert. При выполнении этой команды ваши изменения будут удалены. Например:
sudo systemctl revert nginx
Информацию о том, что служба замаскирована можно увидеть в выводе команды status:
sudo systemctl status nginx 
Для того чтобы вернуть всё как было выполните команду umask:
sudo systemctl umask nginx
Управление службами пользователей
Кроме системных служб Systemd поддерживает службы, работающие от имени обычного пользователя. Они не требуют прав суперпользователя, запускаются при авторизации пользователя в системе и завершаются после завершения его последней сессии. Юнит файлы для этих служб выглядят так же как и для обычных только расположены они в домашней папке пользователя $USER/.config/systemd/user или в системной папке /usr/lib/systemd/user/.
Все команды для управления такими службами аналогичны обычным, только нужно добавить опцию —user. Например, для того чтобы получить список всех служб которые могут работать от имени пользователя выполните:
systemctl —user list-unit-files —type service 
Для просмотра состояния службы используется команда status. Например для службы dbus команда будет выглядеть так:
systemctl —user status dbus.service
Выводы
Теперь управление службами Linux не вызовет у вас проблем. Много чего мы упустили, systemd — очень большая, сложная и многофункциональная система, которую не охватить в одной статье. Но я думаю, что все, что касается управления службами Linux мы разобрали. Если у вас остались вопросы, спрашивайте в комментариях!