启动服务失败

启动服务失败

我创建了一个 systemd 服务:

[Unit]
Description=My service

[Service]
Type=forking
ExecStart=/bin/sh $HOME/theFolder/run.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target
Alias=mine.service

我把它放在/etc/systemd/system文件夹中并命名为mine.service。

如果我运行sudo service mine start它会给我:

无法启动mine.service.Unit 未找到mine.service

- - 更新 - - -

我先运行sudo systemctl daemon-reload,现在它没有给我任何消息,但服务仍然没有启动。

答案1

$HOME指向正在运行脚本的用户的主目录。 Systemd 服务是用 root 启动的,因此它可能会尝试这样做/root/theFolder/run.sh。在服务文件中使用绝对路径。

您还可以forking设置选项。这是自己后台的程序所需要的,您的脚本是否这样做?大多数都不会,如果您的没有,您应该删除此选项,否则 systemd 将等待您的脚本完成以声明其已启动。

此外,不鼓励指向主目录中的脚本的系统服务文件,这可能是一个安全问题。由于它们以 root 身份运行,任何可以修改它们的人都可能获得对您的计算机的 root 访问权限。最好将脚本复制到/usr/local/bin并确保它由 root 拥有并且只能由 root 写入以阻止这种情况。使用服务文件中的User=和选项以非特权用户身份运行脚本也是一个好主意。Group=

如果您想以您的用户身份运行它,最好将服务文件放入~/.config/systemd/user/并启动/启用它systemctl --user enable yourservice && systemctl --user start yourservice(注意,以您的用户而不是 root 身份运行)。看有关用户服务文件的更多信息。

相关内容