Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

go

systemctl

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.

like image 608
Tarasovych Avatar asked Apr 20 '19 09:04

Tarasovych


1 Answers

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.

like image 86
Thomas Avatar answered Nov 10 '22 15:11

Thomas