我创建了一个 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 身份运行)。看这有关用户服务文件的更多信息。