是否可以编写一个绑定到每个 cpuX 实例的 systemd 服务?

是否可以编写一个绑定到每个 cpuX 实例的 systemd 服务?

我正在尝试编写一个systemd .service单元,当它开始创建和注册每个实例时,[email protected]它会自动绑定到每个实例......取决于服务器规格。cpuX%i[email protected] [email protected]

我真的不知道是否有可能在每个 CPU 实例上绑定一个服务,或者我是否需要 .device 或 .target 单元来获取处理器的数量。

我有一些非常丑陋的事情要做,手动使用服务来启动每个实例myservice@%i.service

[Unit]
ConditionPathExistsGlob=/sys/devices/system/cpu/cpu*
[Service]
ExecStartPre=/bin/bash -c "/bin/systemctl set-environment Cpu=$(nproc --all)" 
ExecStart=/bin/bash -c "for ((i=0; i<$$Cpu; i++)); do /bin/systemctl start myservice@cpu$$i.service; done"

问候,

答案1

是的,创建一个与 CPU 设备匹配并为它们分配依赖关系的 udev 规则:

ACTION!="remove", SUBSYSTEM=="cpu", KERNEL=="cpu*", \
    TAG+="systemd", ENV{SYSTEMD_WANTS}+="myservice@%k.service"

TAG+="systemd"将导致 systemd 使虚拟sys-whatever-cpu0.device单元出现与每个设备相对应,并具有适当的“Wants=”依赖项。

类似示例请参见 99-systemd.rules。(您的自定义文件也应该是 99-something,尽管在这种情况下顺序根本不重要。)

相关内容