我在 systemd 守护进程中启用了一些会计功能:
DefaultCPUAccounting=yes
DefaultIOAccounting=yes
DefaultMemoryAccounting=yes
DefaultTasksAccounting=yes
例如,现在我可以看到服务内存使用情况:
● supervisor.service - Supervisor process control system for UNIX
Loaded: loaded (/lib/systemd/system/supervisor.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2022-02-21 15:10:05 UTC; 17min ago
Docs: http://supervisord.org
Main PID: 1842113 (supervisord)
Tasks: 886 (limit: 108515)
Memory: 31.9G
如何获得“31.9G”值?
当然,我可以解析文本,但我想知道是否有任何 systemd 命令可以获取该值来简化 bash 解析。
我发现这个命令:
root@panel:~# systemctl show supervisor | egrep -i memorycurrent
MemoryCurrent=34285473792
a 可能是检查这一点的最佳命令。我只是想看看是否有人有更好的东西。我想使用 systemd 因为我需要了解守护进程和线程使用的内存。
答案1
如果您想要一个与 dbus 兼容的 systemd 解决方案,您可以:
$ busctl introspect \
org.freedesktop.systemd1 \
/org/freedesktop/systemd1/unit/supervisor_2eservice \
org.freedesktop.systemd1.Service
这将为您提供服务的所有服务属性的列表。当您知道什么属性有趣时,您可以简化命令并请求该特定属性:
$ busctl get-property \
org.freedesktop.systemd1 \
/org/freedesktop/systemd1/unit/supervisor_2eservice \
org.freedesktop.systemd1.Service \
MemoryCurrent
这会将以下内容返回到标准输出:
t 34285473792
前面的t
是类型规格。它说这是一个 UINT64。
如果您想“解析”它,您可以将其通过管道传输到awk
或用于-j
获取json
数据并将其通过管道传输到jq
:
$ busctl get-property \
org.freedesktop.systemd1 \
/org/freedesktop/systemd1/unit/supervisor_2eservice \
org.freedesktop.systemd1.Service \
MemoryCurrent | awk '{print $2}'
34285473792
$ busctl get-property \
org.freedesktop.systemd1 \
/org/freedesktop/systemd1/unit/supervisor_2eservice \
org.freedesktop.systemd1.Service \
MemoryCurrent -j | jq '.data'
34285473792
org.freedesktop.systemd.Unit
如果您正在寻找活动状态或依赖项之类的信息,该界面可能更合适,但我认为您在这里描述的具体信息只能在org.freedesktop.systemd.Service
界面上找到。
该dbus
接口是一个很好的低级接口systemd
。如果您想用 C 编写一些东西,您将systemd
使用相同的接口(此处列出的相同服务、对象、接口和属性)进行交互