Вопрос или проблема
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)"
Эта команда выполнит следующие действия:
- hostname: Получит текущее имя хоста системы.
- systemctl –no-pager status httpd | grep Active: Извлечёт строку с информацией о активности службы
httpd
. - 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 предоставляет возможность более эффективно управлять серверной инфраструктурой.