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