当 运行 作为 Ubuntu 上的 systemctl 服务时,Go 无法找到文件

Go can't find file while running as a systemctl service on Ubuntu

我有一个 Go 应用程序,我正在尝试 运行 它作为 systemctl 服务 (Ubuntu 18.04)。

我正在使用 godotenv:

func init() {
    var env map[string]string
    env, err := godotenv.Read()
    if err != nil {
        panic(err)
    }
}

我的 .env 文件位于我的可执行文件所在的同一目录中。

我创建了一个 service 文件:

[Unit]
Description=my go app
Requires=local-fs.target
After=rsyslog.service

[Service]
Type=forking
GuessMainPID=no
StandardInput=null
ExecStart=/var/path/to/my/app/main

[Install]
WantedBy=default.target

执行 sudo systemctl start my-go-app.service 之后,然后 sudo systemctl status my-go-app.service,我在日志中得到了这些:

Starting my-go-app...
panic: open .env: no such file or directory

怎么了?

直接执行main就没有这个问题

I have my .env file in the same directory where my executable is.

然后您需要配置您的工作目录以匹配:

[Service]
...
WorkingDirectory=/var/path/to/my/app

记得在更改任何单元文件后运行systemctl daemon-reload