我想发送一个包含就绪情况和主 pid 的 systemd 通知。不幸的是,systemd 似乎无法处理来自不同名称空间的 pid 转换。(只是猜测...)
具体来说,我正在关注以下服务:
ExecStart=podman run --rm --cgroups=disabled -v /run/systemd:/run/systemd ... script.sh
启动的脚本执行以下操作:
echo "MAINPID=$$" | nc -uUN -w0 /run/systemd/notify
这似乎并没有改变任何事情。MAINPID 设置为 conman(默认)或 podman ( --sdnotify=ignore
)。话又说回来,我实际上是MAINPID=1
从正在运行的容器内部发送的。
这里是否有一些解决方法来确保服务/容器内的特定进程成为 MAINPID?
在ExecStartPost=中使用以加号开头的路径 ,指示systemd以 root 身份运行该命令。我了解到,如果进程以 root 身份运行,则当从意外进程发送 MAINPID 时,systemd 会接受该 MAINPID。
如果你想尝试,你可以尝试
参考文献: 我用systemd系统服务User=和ExecStartPost=做了一个实验(参见GitHub评论)。