我正在尝试编写一个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,尽管在这种情况下顺序根本不重要。)