Определите файл системного модуля по имени процесса
Для некоторых файлов сервисных модулей имя файла модуля не соответствует имени демона.
Например, Postfix: файл модуля называется postfix.service
но запущенные базовые демоны называются master
(главный демон) и qmgr
а также tlsmgr
(вспомогательные демоны).
Я ищу способ получить имя устройства на основе любого из имен демона.
С помощью systemctl status postfix
(в качестве примера), я вижу, что он показывает процессы, которые он породил.
С помощью systemctl --all status
Я могу получить все... но простой отклик в этом беспорядке не вернет имя подразделения.
1 ответ
Решение
API-функция libsystemd sd_pid_get_unit(…)
, Из командной строки вы можете использовать ps
со столбцом UNIT (если он был скомпилирован с поддержкой libsystemd):
$ ps -e -o pid, единица измерения, cmd PID UNIT CMD 1 init.scope / usr / lib / systemd / systemd 315 postfix.service tlsmgr -l -t unix -u 3057 cronie.service / usr / bin / CROND -n 3107 galed.service / usr / bin / galed 3182 getty@tty1.service / sbin / agetty --noclear tty1 linux 29171 postfix.service / usr / lib / postfix / bin / master -w 32758 postfix.service qmgr -l -t unix -u $ ps -o unit = 32758 postfix.service $ ps -o unit = -C tlsmgr postfix.service $ systemctl status $ (пидоф пикап) ● postfix.service - почтовый транспортный агент Postfix Загружен: загружен (/usr/lib/systemd/system/postfix.service; включен; предустановка поставщика: отключена) Активен: активен (работает) с Sun 2016-03-27 17:24:24 EEST; 2 недели 2 дня назад Основной PID: 29171 (мастер) Задачи: 4 (лимит: 512) CGroup: /system.slice/postfix.service 31─ 315 tlsmgr -l -t unix -u 87─ 8720 пикап -l -t unix -u 29─29171 /usr/lib/postfix/bin/master -w 32─32758 qmgr -l -t unix -u $ grep: name = systemd: / proc / $ (pidof pickup) / cgroup 1: имя = Systemd: /system.slice/postfix.service # не полагайтесь на это, так как структура cgroup изменится в ближайшие месяцы