当 运行 作为 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
。
我有一个 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
。