使用“system”用户启动systemd服务来执行bash脚本

使用“system”用户启动systemd服务来执行bash脚本

出于测试目的,systemd 服务文件旨在执行简单的 bash 脚本。我希望该服务由“系统”用户启动。 bash 脚本归该系统用户所有,并已授予执行权限。

服务文件很简单:

[Unit]
Description=Come one step closer
After=network-online.target
Requires=network-online.target

[Service]
User=test1
Group=test1
Type=simple
ExecStart=/usr/bin/bash /absolute/path/to/test.sh

[Install] 
WantedBy=multi-user.target

test.sh 脚本应该简单地向journalctl 发出一条消息 - 它仅用于测试。

我使用以下命令重新加载了 systemd 单元文件:

$ sudo systemctl daemon-reload

我开始服务:

$ sudo systemctl start tester.service

systemctl status tester.service 的输出表明没有 bash 执行的权限。

我将“系统”用户 test1 添加到系统中:

$ sudo useradd -r -s /usr/bin/bash test1 -U

我需要做什么才能让用户 test1 获得启动服务的权限。我无法使用用户 test1 测试 bash 脚本,因为 test1 是系统用户,我无法以 test1 身份登录。

答案1

正如评论中所确定的,问题出在上述目录的权限上/absolute/path/to/test.sh,其中非 root 用户需要具有“执行”(x) 权限才能访问脚本。

这可以通过查看每个父目录的模式来诊断,例如使用以下命令:

ls -ld / /absolute /absolute/path /absolute/path/to /absolute/path/to/test.sh

并检查“test1”用户除了对脚本本身的读取权限之外,是否拥有对所有目录的执行权限test.sh

相关内容