我的systemd服务有什么问题

时间:2018-02-26 09:30:16

标签: go systemd

我已经编写了一个基于labstack / echo和vuejs的golang RestAPI,并且编译了一个工作版本,当我启动它时,一切运行良好。到目前为止一切都很好。

然而,当尝试将其与systemd集成以在启动时启动进程时,我被卡住了。我有一个服务文件。

[Unit]
Description=Server Software Manager
After=network.target

[Service]
Type=simple
ExecStart=/var/gameserver/steam/sman
KillMode=process
User=steam
Group=steam
Restart=on-failure
SuccessExitStatus=2

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

但每次我想启动服务时都会出现以下错误。

Feb 25 14:17:49 <SERVERNAME> systemd[1]: Stopped Server Software Manager.
Feb 25 14:17:49 <SERVERNAME> systemd[1]: Started Server Software Manager.
Feb 25 14:17:49 <SERVERNAME> systemd[1]: sman.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
Feb 25 14:17:49 <SERVERNAME> systemd[1]: sman.service: Unit entered failed state.
Feb 25 14:17:49 <SERVERNAME> systemd[1]: sman.service: Failed with result 'exit-code'.
Feb 25 14:17:50 <SERVERNAME> systemd[1]: sman.service: Service hold-off time over, scheduling restart.
Feb 25 14:17:50 <SERVERNAME> systemd[1]: Stopped Server Software Manager.
Feb 25 14:17:50 <SERVERNAME> systemd[1]: sman.service: Start request repeated too quickly.
Feb 25 14:17:50 <SERVERNAME> systemd[1]: Failed to start Server Software Manager.
Feb 25 14:19:59 <SERVERNAME> systemd[1]: Started Server Software Manager.

根据谷歌的说法,错误是当服务退出时出现错误代码,但当我作为Steam用户手动运行服务时,它不会这样做。

我的假设是单位文件有问题,但我不知道是什么。而且Systemd-analyze也没有抱怨过。 我完全迷失了,并感谢你可能有任何帮助调试这个。

jounarlctl -xfe -u sman的输出:

Feb 26 14:18:23 <SERVERNAME> systemd[1]: Started Server Software Manager.
-- Subject: Unit sman.service has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit sman.service has finished starting up.
-- 
-- The start-up result is done.

注意: 操作系统:Ubuntu 16.04 LTS

1 个答案:

答案 0 :(得分:1)

我终于找到了问题所在。 Systemd需要明确提到的所有Env变量。然而,看起来我有很多麻烦重新加载systemd服务。这就是我最终做的事情。服务需要停止,.service文件移动到systemd没有读取的位置,在用systemctl daemon-reload重新加载systemd之后等到systemctl status $SERVICE声明没有这样的服务。 (如果状态声明了其他任何内容,Systemd可能仍然会重新读取缓存)之后再将.service文件添加到适当的位置,并且最终会有效。