我创建了一个小的golang API(nrfapi),其中包含config.toml文件。我想在其他ubuntu VM上部署api,因此我使用“ GOOS = linux GOARCH = amd64 go build”构建API,然后将构建文件scp到VM / var / www / go目录。我还在/ etc / systemd / system目录中创建了一个以.service结尾的单位文件(nrf.service)。在.service文件中,我具有以下配置
[Unit]
Description= instance to serve nrf api
After=network.target
[Service]
User=root
Group=www-data
ExecStart=/var/www/go/nrfapi)
[Install]
WantedBy=multi-user.target
错误
Error
● nrf.service - instance to serve nrf api
Loaded: loaded (/etc/systemd/system/nrf.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Sat 2019-03-30 16:44:51 EET; 11s ago
Main PID: 4066 (code=exited, status=1/FAILURE)
Mar 30 16:44:51 ubuntu systemd[1]: Started instance to serve nrf api.
Mar 30 16:44:51 ubuntu nrfapi[4066]: 2019/03/30 16:44:51 open config.toml: no such file or directory
Mar 30 16:44:51 ubuntu systemd[1]: nrf.service: Main process exited, code=exited, status=1/FAILURE
Mar 30 16:44:51 ubuntu systemd[1]: nrf.service: Unit entered failed state.
Mar 30 16:44:51 ubuntu systemd[1]: nrf.service: Failed with result 'exit-code'.
但是,在使用以下命令启动API后
sudo systemctl启动nrfapi sudo systemctl启用nrfapi
API未运行。从上面的错误消息中我意识到,该API需要配置config.toml文件。
我现在的问题是我不知道要放置config.toml文件的目录,以便golang api可以从那里读取配置参数。谁能帮我解决这个问题?我该怎么办?
答案 0 :(得分:1)
如果您在Go脚本中使用文件的相对路径,则可执行文件将相对于当前工作目录查找它们。要在systemd
中更改工作目录,只需在WorkingDirectory
部分中添加Service
参数:
[Service]
WorkingDirectory=/var/www/go
并将config.toml
文件放在/var/www/go
目录中。
您还可以使用以下库将静态文件嵌入Go二进制文件:https://github.com/gobuffalo/packr