gpt4 book ai didi

bash - systemctl 服务 systemd-notify 不适用于非 root 用户

转载 作者:行者123 更新时间:2023-12-04 13:00:56 34 4
gpt4 key购买 nike

我在 Red Hat Enterprise Linux 7 上有一个简单的服务单元和 bash 脚本示例,使用 Type=notify我正在努力工作。

当服务单元配置为以 root 身份启动脚本时,事情会按预期工作。添加时User=testuser它失败。当脚本最初启动时(如进程列表所示)systemctl服务永远不会收到指示就绪的通知消息,因此它挂起并最终超时。

[Unit]
Description=My Test
[Service]
Type=notify
User=testuser
ExecStart=/home/iatf/test.sh
[Install]
WantedBy=multi-user.target

Test.sh(由具有执行权限的 testuser 拥有)
#!/bin/bash

systemd-notify --status="Starting..."
sleep 5
systemd-notify --ready --status="Started"

while [ 1 ] ; do
systemd-notify --status="Processing..."
sleep 3
systemd-notify --status="Waiting..."
sleep 3
done

当以 root 身份运行时,systemctl status test 显示从我的 test.sh bash 脚本发送的正确状态和状态消息。当 User=testuser服务挂起,然后超时和 journalctl -xe报告:
Jul 15 13:37:25 tstcs03.ingdev systemd[1]: Cannot find unit for notify message of PID 7193.
Jul 15 13:37:28 tstcs03.ingdev systemd[1]: Cannot find unit for notify message of PID 7290.
Jul 15 13:37:31 tstcs03.ingdev systemd[1]: Cannot find unit for notify message of PID 7388.
Jul 15 13:37:34 tstcs03.ingdev systemd[1]: Cannot find unit for notify message of PID 7480.

我不确定这些 PID 是什么,因为它们没有出现在 ps -ef 列表中

最佳答案

这似乎是 notify 中的已知限制。服务类型

来自 pull requestsystemd手册页

    Due to current limitations of the Linux kernel and the systemd, this
command requires CAP_SYS_ADMIN privileges to work
reliably. I.e. it's useful only in shell scripts running as a root
user.

我尝试了一些 hacky 解决方法 sudo和 friend ,但他们不会像 systemd 那样工作- 通常失败
No status data could be sent: $NOTIFY_SOCKET was not set

这是指 systemd-notify的套接字正在尝试将数据发送到 - 它在服务环境中定义,但我无法将其可靠地暴露在 sudo 环境中

您也可以尝试使用描述的 Python 解决方法 here
python -c "import systemd.daemon, time; systemd.daemon.notify('READY=1'); time.sleep(5)"

它基本上只是一个不可靠的 sleep 以及使用 notify 的全部意义是可靠的服务。

就我而言 - 我只是重构为使用 root作为用户 - 与实际服务作为子项下的主要服务与所需的用户

关于bash - systemctl 服务 systemd-notify 不适用于非 root 用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57060135/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com