不能 运行 将二进制作为 systemctl 守护进程

Cannot run go binary as systemctl daemon

我有一个在路径 /home/me/go/src/myapp 上的 go web 应用程序。 当我 运行 在 bash 终端上使用 ./myapp 的可执行文件时,它工作正常。 然而,这需要一个开放的终端才能继续 运行ning,这是不切实际的,所以我尝试在我的 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'.

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

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

[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 是必要的。