7

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.

Tarasovych
  • 2,228
  • 3
  • 19
  • 51

1 Answers1

14

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.

Thomas
  • 174,939
  • 50
  • 355
  • 478