Go не может найти файл во время работы в качестве сервиса systemctl в Ubuntu - PullRequest
3 голосов
/ 20 апреля 2019

У меня есть приложение 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, я получил их в своих журналах:

Запуск my-go-app ...
паника: открыть .env: нет такого файла или каталога

Что не так?

При непосредственном выполнении main таких проблем нет.

1 Ответ

5 голосов
/ 20 апреля 2019

У меня есть файл .env в том же каталоге, где находится мой исполняемый файл.

Затем необходимо настроить рабочий каталог на соответствие:

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

Не забудьте запустить systemctl daemon-reload после изменения любого файла модуля.

...