294 lines
5.0 KiB
Markdown
294 lines
5.0 KiB
Markdown
## 方式一:使用 systemd 服务(推荐)
|
||
|
||
### 自动安装(推荐)
|
||
|
||
使用安装脚本自动配置 systemd 服务:
|
||
|
||
```bash
|
||
# 进入脚本目录
|
||
cd /www/wwwroot/api.yunzer.cn/scripts
|
||
|
||
# 添加执行权限
|
||
chmod +x install-systemd-service.sh
|
||
|
||
# 运行安装脚本
|
||
sudo bash install-systemd-service.sh
|
||
```
|
||
|
||
脚本会自动:
|
||
- 停止现有服务和进程
|
||
- 创建正确的 systemd 配置文件
|
||
- 启动服务
|
||
- 启用开机自启
|
||
- 显示服务状态和日志
|
||
|
||
### 手动安装
|
||
|
||
如果需要手动配置:
|
||
|
||
```bash
|
||
# 1. 停止现有服务
|
||
systemctl stop go-api
|
||
pkill -f "go run main.go"
|
||
|
||
# 2. 复制服务文件
|
||
sudo cp /www/wwwroot/api.yunzer.cn/scripts/go-api.service /etc/systemd/system/
|
||
|
||
# 3. 重载 systemd
|
||
sudo systemctl daemon-reload
|
||
|
||
# 4. 启动服务
|
||
sudo systemctl start go-api
|
||
|
||
# 5. 启用开机自启
|
||
sudo systemctl enable go-api
|
||
|
||
# 6. 查看状态
|
||
sudo systemctl status go-api
|
||
```
|
||
|
||
### 启动服务
|
||
```bash
|
||
systemctl start go-api
|
||
```
|
||
|
||
### 查看状态
|
||
```bash
|
||
systemctl status go-api
|
||
```
|
||
|
||
### 常用命令
|
||
```bash
|
||
# 启动
|
||
systemctl start go-api
|
||
|
||
# 停止
|
||
systemctl stop go-api
|
||
|
||
# 重启
|
||
systemctl restart go-api
|
||
|
||
# 查看状态
|
||
systemctl status go-api
|
||
|
||
# 查看日志(systemd 日志)
|
||
journalctl -u go-api -f
|
||
|
||
# 查看日志(文件日志)
|
||
tail -f /www/wwwroot/api.yunzer.cn/go.log
|
||
|
||
# 开机自启
|
||
systemctl enable go-api
|
||
|
||
# 禁用开机自启
|
||
systemctl disable go-api
|
||
```
|
||
|
||
## 方式二:使用管理脚本(推荐)
|
||
|
||
### 脚本位置
|
||
```bash
|
||
/www/wwwroot/api.yunzer.cn/scripts/service.sh
|
||
```
|
||
|
||
### 添加执行权限
|
||
```bash
|
||
chmod +x /www/wwwroot/api.yunzer.cn/scripts/service.sh
|
||
```
|
||
|
||
### 常用命令
|
||
```bash
|
||
# 启动服务
|
||
bash /www/wwwroot/api.yunzer.cn/scripts/service.sh start
|
||
|
||
# 停止服务
|
||
bash /www/wwwroot/api.yunzer.cn/scripts/service.sh stop
|
||
|
||
# 重启服务
|
||
bash /www/wwwroot/api.yunzer.cn/scripts/service.sh restart
|
||
|
||
# 查看状态
|
||
bash /www/wwwroot/api.yunzer.cn/scripts/service.sh status
|
||
|
||
# 查看日志(最后 50 行)
|
||
bash /www/wwwroot/api.yunzer.cn/scripts/service.sh logs
|
||
|
||
# 实时查看日志
|
||
bash /www/wwwroot/api.yunzer.cn/scripts/service.sh logs -f
|
||
|
||
# 查看最后 100 行日志
|
||
bash /www/wwwroot/api.yunzer.cn/scripts/service.sh logs 100
|
||
```
|
||
|
||
### 创建快捷命令(可选)
|
||
```bash
|
||
# 添加到 ~/.bashrc
|
||
echo 'alias go-service="bash /www/wwwroot/api.yunzer.cn/scripts/service.sh"' >> ~/.bashrc
|
||
source ~/.bashrc
|
||
|
||
# 使用快捷命令
|
||
go-service start
|
||
go-service restart
|
||
go-service status
|
||
go-service logs -f
|
||
```
|
||
|
||
## 方式三:后台直接启动
|
||
|
||
### 启动服务
|
||
```bash
|
||
cd /www/wwwroot/api.yunzer.cn
|
||
nohup go run main.go > go.log 2>&1 &
|
||
```
|
||
|
||
### 查看是否运行成功
|
||
```bash
|
||
tail -f go.log
|
||
```
|
||
|
||
### 查看进程
|
||
```bash
|
||
ps aux | grep "go run main.go" | grep -v grep
|
||
```
|
||
|
||
### 重启服务
|
||
```bash
|
||
pkill -f "go run main.go" && cd /www/wwwroot/api.yunzer.cn && nohup go run main.go > go.log 2>&1 &
|
||
```
|
||
|
||
### 停止服务
|
||
```bash
|
||
pkill -f "go run main.go"
|
||
```
|
||
|
||
## 日志查看
|
||
|
||
### 查看实时日志
|
||
```bash
|
||
# systemd 方式
|
||
journalctl -u go-api -f
|
||
|
||
# 直接启动方式
|
||
tail -f /www/wwwroot/api.yunzer.cn/go.log
|
||
```
|
||
|
||
### 查看最近日志
|
||
```bash
|
||
# systemd 方式
|
||
journalctl -u go-api -n 100
|
||
|
||
# 直接启动方式
|
||
tail -n 100 /www/wwwroot/api.yunzer.cn/go.log
|
||
```
|
||
|
||
### 查看错误日志
|
||
```bash
|
||
# systemd 方式
|
||
journalctl -u go-api -p err
|
||
|
||
# 直接启动方式
|
||
grep -i error /www/wwwroot/api.yunzer.cn/go.log
|
||
```
|
||
|
||
## 常见问题
|
||
|
||
### 1. 服务启动失败
|
||
|
||
**检查日志**:
|
||
```bash
|
||
# systemd
|
||
journalctl -u go-api -n 50
|
||
|
||
# 直接启动
|
||
tail -n 50 /www/wwwroot/api.yunzer.cn/go.log
|
||
```
|
||
|
||
**常见原因**:
|
||
- 端口被占用(8081)
|
||
- 数据库连接失败
|
||
- 配置文件错误
|
||
|
||
### 2. 端口被占用
|
||
|
||
**查看端口占用**:
|
||
```bash
|
||
netstat -tlnp | grep 8081
|
||
# 或
|
||
lsof -i :8081
|
||
```
|
||
|
||
**停止占用进程**:
|
||
```bash
|
||
# 找到 PID
|
||
lsof -i :8081
|
||
|
||
# 停止进程
|
||
kill -9 <PID>
|
||
```
|
||
|
||
### 3. 进程残留
|
||
|
||
**查找残留进程**:
|
||
```bash
|
||
ps aux | grep "go run main.go" | grep -v grep
|
||
```
|
||
|
||
**清理残留进程**:
|
||
```bash
|
||
pkill -9 -f "go run main.go"
|
||
```
|
||
|
||
### 4. 日志文件不存在
|
||
|
||
**原因**:启动命令没有重定向输出
|
||
|
||
**解决**:使用正确的启动命令
|
||
```bash
|
||
nohup go run main.go > go.log 2>&1 &
|
||
```
|
||
|
||
## 性能监控
|
||
|
||
### 查看资源占用
|
||
```bash
|
||
# CPU 和内存
|
||
top -p $(pgrep -f "go run main.go")
|
||
|
||
# 详细信息
|
||
ps aux | grep "go run main.go" | grep -v grep
|
||
```
|
||
|
||
### 查看连接数
|
||
```bash
|
||
netstat -an | grep 8081 | wc -l
|
||
```
|
||
|
||
### 查看文件描述符
|
||
```bash
|
||
lsof -p $(pgrep -f "go run main.go") | wc -l
|
||
```
|
||
|
||
## 生产环境建议
|
||
|
||
1. **使用 systemd 服务**:更稳定,支持自动重启
|
||
2. **配置日志轮转**:防止日志文件过大
|
||
3. **监控服务状态**:使用监控工具(如 Prometheus)
|
||
4. **定期备份**:备份数据库和配置文件
|
||
5. **使用编译后的二进制**:比 `go run` 更高效
|
||
|
||
### 编译并运行(推荐生产环境)
|
||
```bash
|
||
# 编译
|
||
cd /www/wwwroot/api.yunzer.cn
|
||
go build -o server main.go
|
||
|
||
# 运行
|
||
nohup ./server > go.log 2>&1 &
|
||
|
||
# 或使用 systemd(修改 ExecStart)
|
||
# ExecStart=/www/wwwroot/api.yunzer.cn/server
|
||
```
|
||
|
||
## 更新日期
|
||
|
||
2026-04-09 |