dongying3830 2019-04-20 09:29
浏览 843
已采纳

在Ubuntu上作为systemctl服务运行时Go找不到文件

I have a Go app, and I'm trying to run it as a systemctl service (Ubuntu 18.04).

I'm using godotenv:

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

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

I've created a service file:

[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

After executing sudo systemctl start my-go-app.service, then sudo systemctl status my-go-app.service, I got these in my logs:

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

What's wrong?

While executing main directly, there are no such problems.

  • 写回答

1条回答 默认 最新

  • duandao6414 2019-04-20 09:36
    关注

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

    Then you need to configure your working directory to match:

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

    Remember to run systemctl daemon-reload after changing any unit file.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?