go - 我的系统服务有什么问题

标签 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.

根据 google 的说法,错误是当服务退出并显示错误代码时,但当我以 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

最佳答案

我终于设法找出问题所在。 Systemd 需要明确提及的所有环境变量。但是,看起来我在重新加载 systemd 服务时遇到了很多麻烦。这就是我最终要做的。需要停止服务,将 .service 文件移动到 systemd 无法读取的位置,然后使用 systemctl daemon-reload 重新加载 systemd 并等待 systemctl status $SERVICE声称没有这样的服务。 (如果 status 声明任何其他内容,Systemd 可能仍会重新读取缓存)之后,再次将 .service 文件添加到适当的位置,瞧,它最终起作用了。

关于go - 我的系统服务有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48985184/

相关文章:

go - 迭代时替换 channel

java - 当我使用 nohup 时 Spring Boot 应用程序自动关闭

linux - 如何在 journalctl 之外分析 journalctl 日志?

http - 何时使用 Golang 的默认 MUX 与使用自己的 MUX

mysql - 如何使用 github.com/go-sql-driver/mysql 指定服务器的端口号?

go - panic : runtime error: makeslice: cap out of range

go - 当我启用 module.jobs 时,Revel 没有启动

linux - 将 systemd 脚本输出重定向到控制台

linux - 当应用程序可以作为系统服务运行时,为什么要使用 nohup?

bash - Go 应用程序作为 systemd 服务运行