Определите файл системного модуля по имени процесса

Для некоторых файлов сервисных модулей имя файла модуля не соответствует имени демона.

Например, 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 изменится в ближайшие месяцы
Другие вопросы по тегам