我在尝试启动自定义 systemd 服务时收到此错误。
netrender-slave.service:在步骤 EXEC 生成 /usr/local/bin/netrender-slave.sh 时失败:权限被拒绝
这是/etc/systemd/system/netrender-slave.service
[Unit]
Description=Blender netrender slave manager
[Service]
ExecStart=/usr/local/bin/netrender-slave.sh start
ExecStop=/usr/local/bin/netrender-slave.sh stop
ExecReload=/usr/local/bin/netrender-slave.sh reload
Type=simple
[Install]
WantedBy=multi-user.target
在这个问题,问题是脚本的权限,但netrender-slave.sh
看起来没问题:
~# ls -al /usr/local/bin
total 16
drwxr-xr-x 2 root root 4096 Dec 4 11:30 .
drwxr-xr-x 10 root root 4096 Apr 20 2016 ..
-rwxr-xr-x 1 root root 816 Dec 4 11:30 netrender-slave.sh
在这个问题问题是其中一个目录权限不足,但所有/usr/local/bin
目录都与此类似:
drwxr-xr-x 2 root root 4096 Dec 4 11:30 .
drwxr-xr-x 10 root root 4096 Apr 20 2016 ..
...
然而,在同一问题的评论中提供了这一点:
输出
ls
没有显示尾随 .在 UGO 权限之后drwxr-xr-x
- GNU ls 使用一个.
字符来指示具有 SELinux 安全上下文的文件,但没有其他替代访问方法。具有任何其他备用访问方法组合的文件都标有一个+
字符。
我不明白如何检查这是否是我的问题。
答案1
这是一个糟糕的做法,配得上 systemd 的恐怖屋。您可能认为唯一的问题是脚本文件缺少解释器。它不是。您没有看到的更大问题是 van Smoorenburgrc
脚本的包装,其中包含完全不必要的穷人服务管理,在服务单元内。这最终导致错误的进程作为守护进程,并且无法正确管理事物。
不要那样做根本不。
您应该告诉它的开发人员,它的-b
选项是一个令人困惑的文档。
[单元] 描述=Blender netrender 从属管理器 文档=https://unix.stackexchange.com/a/408848/5132 [服务] 类型=简单 工作目录=/mnt/my-data 用户=ec2-用户 环境 = FLAGS =“simple_slave_eiptarget.blend --addons netrender -a -noaudio -nojoystick” ExecStart=/mnt/my-data/blender-2.73a-linux-glibc211-x86_64/blender -b $FLAGS --enable-autoexec [安装] WantedBy=多用户.target
进一步阅读
- 乔纳森·德博因·波拉德 (2015)。 systemd 恐怖屋。经常给出的答案。
- 乔纳森·德博因·波拉德 (2001)。 设计 Unix 守护程序时要避免的错误。经常给出的答案。
- 乔纳森·德博因·波拉德 (2015)。Unix 守护进程的就绪协议问题。常见答案。