无法启动服务


15

我创建了一个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,现在没有任何消息,但该服务仍然无法启动。


10
systemctl daemon-reload创建单位文件后您运行了吗?
维兰德

@Wieland:嗯..现在它没有显示任何消息。但是,它仍然没有开始。
乔治

@don_crissti:状态为活动,但未执行脚本(在ExecStart中)。
乔治

如何知道正确的$ HOME?您对系统服务有什么期望?
Serge

@Serge:Hmm..So,如何使用$ HOME?
乔治,

Answers:


14

$HOME指向运行脚本的用户的主目录。系统服务从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用户身份运行)。请参阅以获取有关用户服务文件的更多信息。


:我将脚本放到/ usr / local / bin中,服务放到/.config/systemd/user中。如果我尝试启用该服务,它将显示“多余的参数”。如果我尝试使用systemctl,则显示“失败” .. unit ..',类似的东西。
乔治,

您能否提供您尝试过的完整命令和更详细的日志。很难用片段进行调试。
Michael Daffin '16

:是否有使用$ HOME路径的解决方案?因为,如果我将脚本放在/ usr / local / bin中,它会使用$ HOME的相对路径。我看到了这一点,然后尝试放入HOME=$HOME第一个环境文件。但是该服务无法启动,没有错误。
乔治,

1
在ubuntu上,我不得不为此使用systemctl而不是systemd,使用systemd时出现错误“多余的参数”
Alexander Mills

1
@AlexanderMills是的,在systemctl和systemd中正确的命令只是答案中的错字。
迈克尔·达芬
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.