我创建了一个 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
Run Code Online (Sandbox Code Playgroud)
我把它放在 /etc/systemd/system 文件夹中,并将其命名为 mine.service。
如果我运行sudo service mine start它会给我:
无法启动 mine.service.Unit mine.service not found
- - 更新 - - -
我先运行sudo systemctl daemon-reload,现在它没有给我任何消息,但服务仍然没有启动。
Mic*_*fin 16
$HOME指向正在运行脚本的用户的主目录。Systemd 服务以 root 启动,因此它可能会尝试/root/theFolder/run.sh. 在服务文件中使用绝对路径。
您还forking可以设置选项。这是背景程序本身所需要的,您的脚本是否执行此操作?大多数没有,如果你没有,你应该删除这个选项,否则 systemd 将等待你的脚本完成以将其声明为已启动。
此外,不鼓励指向主目录中脚本的系统服务文件,这可能是安全问题。由于它们以 root 身份运行,任何可以修改它们的人都有可能获得对您计算机的 root 访问权限。最好将脚本复制到/usr/local/bin并确保它是拥有的并且只能由 root 写入以阻止这种情况。使用服务文件中的User=和Group=选项以非特权用户身份运行脚本也是一个好主意。
如果您想以您的用户身份运行它,最好将服务文件放入~/.config/systemd/user/并启动/启用它systemctl --user enable yourservice && systemctl --user start yourservice(注意,以您的用户而不是 root 身份运行)。见这对用户的服务文件的详细信息。
| 归档时间: |
|
| 查看次数: |
119731 次 |
| 最近记录: |