Golang Go语言中 systemctl 管理静态文件路径问题

发布于 1周前 作者 yibo5220 来自 Go语言

Golang Go语言中 systemctl 管理静态文件路径问题

使用 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


更多关于Golang Go语言中 systemctl 管理静态文件路径问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

14 回复

working directory 了解一下

更多关于Golang Go语言中 systemctl 管理静态文件路径问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


cwd 的问题, 你需要配置 systemd 的 current working directory

当前目录啊,兄 dei。
你试试先 cd 到 /,再执行 /home/ec2-user/gm 还能不能找到静态文件吧

建议使用 packr2

要么在 service file 里写明工作目录

要么在代码里用 os.Executable 取可执行文件的目录




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

直接用 systemctl 管理的啊。如何 cd 到当前目录?

packr2 是什么? 和 systemctl 类似也是进程管理工具吗?




谢谢,确实是 WorkingDirectory 的问题。 上面回复没生效是因为之前为测试修改了代码里的静态文件路径…… 😂

#8 将静态文件打包到 go 可执行文件中,实现单文件部署

#11 对,你可用 v2 版本

好的。非常感谢,我试试!

在Golang中,虽然语言本身并不直接涉及systemctl或系统服务管理,但你可以通过编写服务单元文件(.service)来使用systemctl来管理你的Go应用程序,并配置静态文件路径。

如果你的Go应用程序需要访问静态文件(如HTML、CSS、JavaScript等),通常这些文件会被打包在应用程序的二进制文件旁边,或者通过配置指定路径来访问。

要在systemctl中管理这些路径,你需要在你的.service文件中正确设置工作目录(WorkingDirectory)或环境变量(Environment)。例如:

[Unit]
Description=My Go Application

[Service]
ExecStart=/path/to/your/go-application
WorkingDirectory=/path/to/your/static/files
Environment=STATIC_FILES_PATH=/path/to/your/static/files

[Install]
WantedBy=multi-user.target

在这个例子中,WorkingDirectory设置了应用程序的工作目录,你可以在此目录中访问静态文件。同时,通过Environment变量,你可以将静态文件路径传递给你的Go应用程序,以便在运行时使用。

请确保你的Go应用程序能够正确读取这些环境变量或工作目录,并在需要时访问静态文件。此外,还要确保.service文件的路径和权限设置正确,以便systemctl能够正确加载和管理你的服务。

总之,虽然Golang不直接管理systemctl,但通过适当的配置,你可以使用systemctl来启动和管理你的Go应用程序,并正确设置静态文件路径。

回到顶部