【问题标题】:Cannot run go binary as systemctl daemon无法将 go binary 作为 systemctl 守护进程运行
【发布时间】:2020-07-17 11:00:00
【问题描述】:

我有一个 go web 应用程序,它位于路径 /home/me/go/src/myapp 上。 当我在 bash 终端上使用 ./myapp 运行可执行文件时,它工作正常。 但是,这需要一个打开的终端才能继续运行,这不切实际,所以我尝试在我的 Debian 服务器的 /etc/systemd/system/myapp.service 上创建一个 systemd 守护进程,如下所示:

[Unit]
Description=MyApp Daemon
StartLimitIntervalSec=0
[Service]
Type=simple
User= me
Group=www-data
ExecStart=/home/me/go/src/myapp/myapp
TimeoutStopSec=300
[Install]
WantedBy=multi-user.target

我已经启用并启动了守护进程:

systemctl enable myapp

开始吧:

systemctl start myapp

但是它无法运行守护进程,我得到这个错误:

# systemctl status myapp
● myapp.service - MyApp Daemon
   Loaded: loaded (/etc/systemd/system/myapp.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Fri 2020-07-17 05:42:18 CDT; 4s ago
  Process: 19058 ExecStart=/home/me/go/src/myapp/myapp (code=exited, status=127)
 Main PID: 19058 (code=exited, status=127)
      CPU: 2ms
 Jul 17 05:42:18 front systemd[1]: Started Myapp Daemon.
Jul 17 05:42:18 front systemd[1]: myapp.service: Main process exited, code=exited, status=127/n/a
Jul 17 05:42:18 front systemd[1]: myapp.service: Unit entered failed state.
Jul 17 05:42:18 front systemd[1]: myapp.service: Failed with result 'exit-code'.

我想知道可能出了什么问题,我应该如何解决?

【问题讨论】:

  • 发生这种情况时,您是否在journalctl -xe 中看到任何输出?除了检查文件的可执行权限之外,您通常不需要做任何特别的事情。
  • 是的,我在日志中得到了这个pam_unix(sshd:auth): check pass; user unknown Jul 17 06:23:13 front sshd[19998]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=20
  • 用户我存在吗?
  • 当然。就是我!
  • 试试sudo journalctl -f -u myapp.service

标签: go daemon systemd


【解决方案1】:

经过大量试验和错误后,此配置对我有用:

[Unit]
Description=Sai Go webapp Daemon
#After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
User= me
Group=www-data
WorkingDirectory=/home/me/go/src/myapp/
ExecStart=/home/me/go/src/myapp/myapp
TimeoutStopSec=300
[Install]
WantedBy=multi-user.target

显然WorkingDirectory 是必要的。

【讨论】:

    最近更新 更多