对于某些服务单元文件,单元文件名与守护进程的名称不对应。
例如 Postfix:调用单元文件,postfix.service
但启动的底层守护进程被命名为master
(主守护进程)和qmgr
(tlsmgr
辅助守护进程)。
我正在寻找一种基于任何守护进程名称来获取单元名称的方法。
使用systemctl status postfix
(作为示例),我可以看到它显示了它所产生的进程。
使用systemctl --all status
我可以获得所有内容....但仅在那堆乱糟糟的东西中进行简单的 grep 并不能找回单位名称。
答案1
这libsystemdAPI 函数是sd_pid_get_unit(…)
。从命令行,您可以使用ps
UNIT 列(如果它是在 libsystemd 支持下编译的):
$ ps -e -o pid,单位,cmd PID 单元命令 1 init.scope /usr/lib/systemd/systemd 315 postfix.service tlsmgr -l -t unix -u 3057 cronie.service /usr/bin/CROND -n 3107 galed.服务 /usr/bin/galed 3182[电子邮件保护] /sbin/agetty --noclear tty1 linux 29171 postfix.服务 /usr/lib/postfix/bin/master -w 32758 postfix.service qmgr-l-t unix-u $ ps -o 单位= 32758 postfix 服务 $ ps -o 单位= -C tlsmgr postfix 服务 $ systemctl 状态 $(pidof pickup) ● postfix.service - Postfix 邮件传输代理 已加载:已加载(/usr/lib/systemd/system/postfix.service;已启用;供应商预设:已禁用) 活跃:自 2016-03-27 17:24:24 EEST 以来一直处于活跃状态(运行);2 周 2 天前 主 PID:29171(主) 任务:4(限制:512) CGroup:/system.slice/postfix.service 315 tlsmgr-l-t unix-u ─ 8720 拾音器-l -t unix -u ─29171 /usr/lib/postfix/bin/master -w └─32758 qmgr-l-t unix-u $ grep :name=systemd: /proc/$(pidof pickup)/cgroup 1:名称=systemd:/system.slice/postfix.service #不要依赖这个,因为 cgroup 结构将在未来几个月内发生变化