使用 gin 写了一个 http 服务器,其中静态文件使用如下方式实现:
r.Static("/index", "./public")
服务器上的目录结构如下:
├── ec2-user // 根目录
│ ├── gm // 二进制文件
│ └── public // 静态文件目录
现在通过直接运行gm
这个二进制文件的方式,是能正常访问到静态文件的,即:````http://xxx.com/index``` 这样能正常访问到 public 下的静态文件
但是我通过 systemctl 管理 golang 进程之后静态文件就 404 了。 请问各位大佬这个文件路径应该如何配置?
贴一下我 systemctl .service 文件
[Unit]
Description=dm-gm
[Service]
Type=simple
Restart=always
RestartSec=5s
Environment=GIN_MODE=release
ExecStart=/home/ec2-user/gm
[Install]
WantedBy=multi-user.target
1
k9982874 2019-05-20 11:13:17 +08:00 via iPhone
working directory 了解一下
|
2
lihongjie0209 2019-05-20 11:15:26 +08:00
cwd 的问题, 你需要配置 systemd 的 current working directory
|
3
raysonx 2019-05-20 11:16:56 +08:00 via Android
当前目录啊,兄 dei。
你试试先 cd 到 /,再执行 /home/ec2-user/gm 还能不能找到静态文件吧 |
4
mritd 2019-05-20 11:20:42 +08:00 via iPhone
建议使用 packr2
|
5
reus 2019-05-20 11:26:22 +08:00
要么在 service file 里写明工作目录
要么在代码里用 os.Executable 取可执行文件的目录 |
6
imherer OP @lihongjie0209
@k9982874 @reus WorkingDirectory 有配置过,但是没起左右。尝试了各种路径配置都不行。 贴一下带 WorkingDirectory 的配置文件 [Unit] Description=dm-gm [Service] Type=simple Restart=always RestartSec=5s Environment=GIN_MODE=release WorkingDirectory=/home/ec2-user ExecStart=/home/ec2-user/gm [Install] WantedBy=multi-user.target |
9
imherer OP |
11
imherer OP |