出于测试目的,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 身份登录。
正如评论所确定的,问题在于上述目录的权限
/absolute/path/to/test.sh
,其中非root用户需要具有“执行”(x)权限才能访问脚本。这可以通过查看每个父目录的模式来诊断,例如使用如下命令:
并检查“test1”用户是否具有对所有目录的执行权限,以及对
test.sh
脚本本身的读取权限。