出于测试目的,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
。