Как напечатать только состояние “Active” службы systemctl?

Вопрос или проблема

systemctl status httpd

● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2019-10-11 00:35:58 EEST; 1 weeks 3 days ago
     Docs: man:httpd(8)
           man:apachectl(8)
  Process: 29728 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
 Main PID: 10722 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
   Memory: 8.7M

Я хочу напечатать только ниже строку вместе с именем хоста

Active: active (running) since Fri 2019-10-11 00:35:58 EEST; 1 weeks 3 days ago

systemctl --no-pager status httpd | grep Active должен вернуть желаемый вывод.

Ответ @Haxiel делает именно то, что вы просили.
Однако, я считаю, что правильный способ получить состояние службы:

systemctl show httpd.service --property ActiveState --value

Если вы хотите объединить это с именем хоста, я бы сделал так:

echo "${HOSTNAME}: httpd is $(systemctl show httpd.service --property ActiveState --value)"

Что показывает, например: my.hostname.com: httpd is active

Ответ или решение

Для ИТ-специалистов, которые работают с системой управления демонами systemd, часто бывает необходимо получить информацию о статусе служб, включая такие параметры, как их активность и время последнего запуска. В вашем случае, задача заключается в том, чтобы напечатать только строку, содержащую статус "Active" вместе с именем хоста. Для этого можно предложить несколько подходов, основанных на командах systemctl и использовании оболочек командной строки Linux.

Теория

systemctl является основной утилитой для взаимодействия с systemd, которая управляет службами (службами) в системах на базе Linux. Она позволяет запускать, останавливать, перезапускать, а также проверять статусы служб. Команда systemctl status выводит детализированную информацию о заданной службе, включая её состояние, информацию о процессе, использование памяти и время активации. Однако, если вам нужно извлечь только конкретные данные, такие как строка с активным статусом, используемые инструменты командной строки, как grep, позволяют это сделать эффективно.

Пример

Рассмотрим пример использования команды:

systemctl status httpd

Данная команда выведет полную информацию о статусе службы httpd (Apache HTTP Server). Однако, если вам нужно выделить только строку, содержащую статус "Active", вы можете использовать команду grep:

systemctl --no-pager status httpd | grep Active

Этот подход извлечёт только строку, содержащую "Active", из полной информации о статусе службы.

Применение

Теперь, чтобы также включить имя хоста в вывод, вы можете воспользоваться следующей конструкцией:

echo "$(hostname): $(systemctl --no-pager status httpd | grep Active)"

Эта команда выполнит следующие действия:

  1. hostname: Получит текущее имя хоста системы.
  2. systemctl –no-pager status httpd | grep Active: Извлечёт строку с информацией о активности службы httpd.
  3. echo: Выведет результат, включающий имя хоста и статус службы.

Этот подход позволяет вам получить читаемый вывод, например: myhostname: Active: active (running) since...

Более эффективный способ

Если вы хотите получить ещё более точную и лаконичную информацию о состоянии службы, альтернативный подход может включать использование systemctl show, который позволяет запросить конкретные свойства службы:

systemctl show httpd.service --property ActiveState --value

Эта команда вернёт только текущее состояние активности службы (например, "active"), без лишней информации.

Чтобы объединить это с именем хоста, используйте следующую команду:

echo "$(hostname): httpd is $(systemctl show httpd.service --property ActiveState --value)"

Технически, это решение более эффективно, особенно при написании скриптов, так как оно минимизирует количество обрабатываемой информации и выполняется быстрее за счёт прямого запроса конкретного свойства.

Заключение

Для управления службами Linux крайне важно уметь правильно и удобно извлекать информацию о статусе службы. Простой подход с использованием systemctl и grep позволяет быстро получить строку с активным статусом, однако более глубокая интеграция с systemd с помощью systemctl show может быть полезна для написания скриптов и автоматизации процессов, где важно сократить избыточность вывода и повысить скорость выполнения. Важно помнить, что знание и понимание принципов работы systemd предоставляет возможность более эффективно управлять серверной инфраструктурой.

Оцените материал
Добавить комментарий

Капча загружается...