Showing
14 changed files
with
550 additions
and
1 deletions
.idea/vcs.xml
0 → 100644
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
| ... | @@ -13,7 +13,7 @@ API_CONFIG = { | ... | @@ -13,7 +13,7 @@ API_CONFIG = { |
| 13 | "headers": { | 13 | "headers": { |
| 14 | "accept": "*/*", | 14 | "accept": "*/*", |
| 15 | "Content-Type": "application/json", | 15 | "Content-Type": "application/json", |
| 16 | - "Authorization": os.getenv("API_AUTHORIZATION", "Bearer 2.3e67bc239d7144bd9885cee8ffcbc8be"), | 16 | + "Authorization": os.getenv("API_AUTHORIZATION", "Bearer 2.343fa30a6a4d42b6afe62bdd0570a50b"), |
| 17 | "Ver": os.getenv("API_VER", "033BD94B1168D7E4F0D644C3C95E35BF.D73E33B659AD1D6B7D181D1DF8D05760"), | 17 | "Ver": os.getenv("API_VER", "033BD94B1168D7E4F0D644C3C95E35BF.D73E33B659AD1D6B7D181D1DF8D05760"), |
| 18 | "Referer": os.getenv("API_REFERER", "http://192.168.1.251/") | 18 | "Referer": os.getenv("API_REFERER", "http://192.168.1.251/") |
| 19 | } | 19 | } | ... | ... |
deploy/README.md
0 → 100644
| 1 | +# 部署指南(无 root 权限) | ||
| 2 | + | ||
| 3 | +## 一、服务器准备 | ||
| 4 | + | ||
| 5 | +1. 购买阿里云 ECS(Ubuntu 20.04+ 或 CentOS 7+) | ||
| 6 | +2. 安全组开放端口:`22`、`2025` | ||
| 7 | +3. SSH 连接服务器(使用普通用户,非 root) | ||
| 8 | + | ||
| 9 | +## 二、检查环境 | ||
| 10 | + | ||
| 11 | +```bash | ||
| 12 | +# 检查 Python 版本(需要 Python 3.8+) | ||
| 13 | +python3 --version | ||
| 14 | + | ||
| 15 | +# 如果没有 Python3,尝试安装(可能需要管理员协助) | ||
| 16 | +# 或使用 conda/miniconda 等用户级 Python 环境 | ||
| 17 | +``` | ||
| 18 | + | ||
| 19 | +## 三、部署应用 | ||
| 20 | + | ||
| 21 | +### 1. 上传代码 | ||
| 22 | + | ||
| 23 | +```bash | ||
| 24 | +# 方式1: 使用 scp(本地执行,替换 username 为你的用户名) | ||
| 25 | +scp -r . username@服务器IP:~/langgraph/ | ||
| 26 | + | ||
| 27 | +# 方式2: 使用 Git | ||
| 28 | +cd ~ | ||
| 29 | +git clone <仓库地址> langgraph | ||
| 30 | + | ||
| 31 | +# 方式3: 使用 FTP/SFTP 工具上传到 ~/langgraph/ | ||
| 32 | +``` | ||
| 33 | + | ||
| 34 | +### 2. 安装依赖 | ||
| 35 | + | ||
| 36 | +```bash | ||
| 37 | +cd ~/langgraph | ||
| 38 | +python3 -m venv venv | ||
| 39 | +source venv/bin/activate | ||
| 40 | +pip install --upgrade pip | ||
| 41 | +pip install -r requirements.txt | ||
| 42 | +pip install uvicorn python-dotenv | ||
| 43 | +``` | ||
| 44 | + | ||
| 45 | +### 3. 配置环境变量 | ||
| 46 | + | ||
| 47 | +```bash | ||
| 48 | +cd ~/langgraph | ||
| 49 | +vim .env | ||
| 50 | +``` | ||
| 51 | + | ||
| 52 | +添加内容: | ||
| 53 | +```env | ||
| 54 | +OPENAI_API_KEY=your-api-key | ||
| 55 | +OPENAI_BASE_URL=https://api.deepseek.com/v1 | ||
| 56 | +``` | ||
| 57 | + | ||
| 58 | +### 4. 创建日志目录 | ||
| 59 | + | ||
| 60 | +```bash | ||
| 61 | +mkdir -p ~/langgraph/logs | ||
| 62 | +``` | ||
| 63 | + | ||
| 64 | +## 四、启动服务 | ||
| 65 | + | ||
| 66 | +### 方式1: 使用启动脚本(推荐) | ||
| 67 | + | ||
| 68 | +```bash | ||
| 69 | +cd ~/langgraph | ||
| 70 | +chmod +x deploy/start.sh deploy/stop.sh deploy/restart.sh | ||
| 71 | + | ||
| 72 | +# 启动服务 | ||
| 73 | +./deploy/start.sh | ||
| 74 | + | ||
| 75 | +# 停止服务 | ||
| 76 | +./deploy/stop.sh | ||
| 77 | + | ||
| 78 | +# 重启服务 | ||
| 79 | +./deploy/restart.sh | ||
| 80 | +``` | ||
| 81 | + | ||
| 82 | +### 方式2: 使用 nohup 后台运行 | ||
| 83 | + | ||
| 84 | +```bash | ||
| 85 | +cd ~/langgraph | ||
| 86 | +source venv/bin/activate | ||
| 87 | +nohup python start_server_direct.py > logs/app.log 2>&1 & | ||
| 88 | +echo $! > logs/app.pid # 保存进程ID | ||
| 89 | +``` | ||
| 90 | + | ||
| 91 | +### 方式3: 使用 screen(推荐用于长时间运行) | ||
| 92 | + | ||
| 93 | +```bash | ||
| 94 | +# 安装 screen(如果未安装,可能需要管理员协助) | ||
| 95 | +# 或使用 tmux | ||
| 96 | + | ||
| 97 | +# 创建 screen 会话 | ||
| 98 | +screen -S langgraph | ||
| 99 | + | ||
| 100 | +# 在 screen 中启动 | ||
| 101 | +cd ~/langgraph | ||
| 102 | +source venv/bin/activate | ||
| 103 | +python start_server_direct.py | ||
| 104 | + | ||
| 105 | +# 按 Ctrl+A 然后按 D 退出 screen(服务继续运行) | ||
| 106 | + | ||
| 107 | +# 重新连接 screen | ||
| 108 | +screen -r langgraph | ||
| 109 | +``` | ||
| 110 | + | ||
| 111 | +### 方式4: 使用 tmux | ||
| 112 | + | ||
| 113 | +```bash | ||
| 114 | +# 创建 tmux 会话 | ||
| 115 | +tmux new -s langgraph | ||
| 116 | + | ||
| 117 | +# 在 tmux 中启动 | ||
| 118 | +cd ~/langgraph | ||
| 119 | +source venv/bin/activate | ||
| 120 | +python start_server_direct.py | ||
| 121 | + | ||
| 122 | +# 按 Ctrl+B 然后按 D 退出 tmux(服务继续运行) | ||
| 123 | + | ||
| 124 | +# 重新连接 tmux | ||
| 125 | +tmux attach -t langgraph | ||
| 126 | +``` | ||
| 127 | + | ||
| 128 | +## 五、验证部署 | ||
| 129 | + | ||
| 130 | +```bash | ||
| 131 | +# 检查服务是否运行 | ||
| 132 | +curl http://localhost:2025/ok | ||
| 133 | + | ||
| 134 | +# 或从外部访问(替换为你的服务器IP) | ||
| 135 | +curl http://服务器IP:2025/ok | ||
| 136 | + | ||
| 137 | +# 查看日志 | ||
| 138 | +tail -f ~/langgraph/logs/app.log | ||
| 139 | + | ||
| 140 | +# 检查进程 | ||
| 141 | +ps aux | grep start_server_direct | ||
| 142 | +``` | ||
| 143 | + | ||
| 144 | +## 六、进程管理 | ||
| 145 | + | ||
| 146 | +### 查看进程 | ||
| 147 | + | ||
| 148 | +```bash | ||
| 149 | +# 查看进程ID | ||
| 150 | +cat ~/langgraph/logs/app.pid | ||
| 151 | + | ||
| 152 | +# 查看进程状态 | ||
| 153 | +ps -p $(cat ~/langgraph/logs/app.pid 2>/dev/null) | ||
| 154 | +``` | ||
| 155 | + | ||
| 156 | +### 停止服务 | ||
| 157 | + | ||
| 158 | +```bash | ||
| 159 | +# 如果使用启动脚本 | ||
| 160 | +~/langgraph/deploy/stop.sh | ||
| 161 | + | ||
| 162 | +# 如果使用 nohup | ||
| 163 | +kill $(cat ~/langgraph/logs/app.pid) | ||
| 164 | + | ||
| 165 | +# 如果使用 screen | ||
| 166 | +screen -S langgraph -X quit | ||
| 167 | + | ||
| 168 | +# 如果使用 tmux | ||
| 169 | +tmux kill-session -t langgraph | ||
| 170 | + | ||
| 171 | +# 手动查找并杀死进程 | ||
| 172 | +ps aux | grep start_server_direct | grep -v grep | awk '{print $2}' | xargs kill | ||
| 173 | +``` | ||
| 174 | + | ||
| 175 | +### 重启服务 | ||
| 176 | + | ||
| 177 | +```bash | ||
| 178 | +# 使用启动脚本 | ||
| 179 | +~/langgraph/deploy/restart.sh | ||
| 180 | + | ||
| 181 | +# 或手动停止后重新启动 | ||
| 182 | +./deploy/stop.sh | ||
| 183 | +./deploy/start.sh | ||
| 184 | +``` | ||
| 185 | + | ||
| 186 | +## 七、更新代码 | ||
| 187 | + | ||
| 188 | +```bash | ||
| 189 | +cd ~/langgraph | ||
| 190 | + | ||
| 191 | +# 停止服务 | ||
| 192 | +./deploy/stop.sh | ||
| 193 | + | ||
| 194 | +# 更新代码(根据你的方式) | ||
| 195 | +git pull | ||
| 196 | +# 或重新上传文件 | ||
| 197 | + | ||
| 198 | +# 更新依赖(如果有新依赖) | ||
| 199 | +source venv/bin/activate | ||
| 200 | +pip install -r requirements.txt | ||
| 201 | + | ||
| 202 | +# 重启服务 | ||
| 203 | +./deploy/start.sh | ||
| 204 | +``` | ||
| 205 | + | ||
| 206 | +## 八、日志管理 | ||
| 207 | + | ||
| 208 | +```bash | ||
| 209 | +# 查看实时日志 | ||
| 210 | +tail -f ~/langgraph/logs/app.log | ||
| 211 | + | ||
| 212 | +# 查看最近100行 | ||
| 213 | +tail -n 100 ~/langgraph/logs/app.log | ||
| 214 | + | ||
| 215 | +# 查看错误日志 | ||
| 216 | +grep -i error ~/langgraph/logs/app.log | ||
| 217 | + | ||
| 218 | +# 清空日志(谨慎使用) | ||
| 219 | +> ~/langgraph/logs/app.log | ||
| 220 | +``` | ||
| 221 | + | ||
| 222 | +## 九、开机自启(可选) | ||
| 223 | + | ||
| 224 | +### 方法1: 添加到 ~/.bashrc 或 ~/.profile | ||
| 225 | + | ||
| 226 | +```bash | ||
| 227 | +# 编辑 ~/.bashrc | ||
| 228 | +vim ~/.bashrc | ||
| 229 | + | ||
| 230 | +# 添加以下内容(如果是交互式登录,使用 ~/.profile) | ||
| 231 | +if [ -f ~/langgraph/deploy/start.sh ]; then | ||
| 232 | + ~/langgraph/deploy/start.sh | ||
| 233 | +fi | ||
| 234 | +``` | ||
| 235 | + | ||
| 236 | +**注意**:这种方法会在每次登录时启动,可能不是最佳选择。 | ||
| 237 | + | ||
| 238 | +### 方法2: 使用 cron(推荐) | ||
| 239 | + | ||
| 240 | +```bash | ||
| 241 | +# 编辑 crontab | ||
| 242 | +crontab -e | ||
| 243 | + | ||
| 244 | +# 添加以下行(服务器重启后自动启动) | ||
| 245 | +@reboot sleep 30 && /bin/bash ~/langgraph/deploy/start.sh | ||
| 246 | +``` | ||
| 247 | + | ||
| 248 | +## 十、故障排查 | ||
| 249 | + | ||
| 250 | +### 服务无法启动 | ||
| 251 | + | ||
| 252 | +```bash | ||
| 253 | +# 检查 Python 环境 | ||
| 254 | +cd ~/langgraph | ||
| 255 | +source venv/bin/activate | ||
| 256 | +python --version | ||
| 257 | +which python | ||
| 258 | + | ||
| 259 | +# 检查依赖 | ||
| 260 | +pip list | grep langgraph | ||
| 261 | + | ||
| 262 | +# 手动测试启动 | ||
| 263 | +python start_server_direct.py | ||
| 264 | +``` | ||
| 265 | + | ||
| 266 | +### 端口被占用 | ||
| 267 | + | ||
| 268 | +```bash | ||
| 269 | +# 查看端口占用 | ||
| 270 | +lsof -i :2025 | ||
| 271 | +# 或 | ||
| 272 | +netstat -tlnp | grep 2025 | ||
| 273 | + | ||
| 274 | +# 杀死占用进程 | ||
| 275 | +kill -9 <PID> | ||
| 276 | +``` | ||
| 277 | + | ||
| 278 | +### 无法访问服务 | ||
| 279 | + | ||
| 280 | +1. **检查防火墙**:确认阿里云安全组已开放端口 2025 | ||
| 281 | +2. **检查服务状态**:`ps aux | grep start_server_direct` | ||
| 282 | +3. **检查日志**:`tail -f ~/langgraph/logs/app.log` | ||
| 283 | +4. **测试本地访问**:`curl http://localhost:2025/ok` | ||
| 284 | + | ||
| 285 | +### API 密钥错误 | ||
| 286 | + | ||
| 287 | +```bash | ||
| 288 | +# 检查 .env 文件 | ||
| 289 | +cat ~/langgraph/.env | ||
| 290 | + | ||
| 291 | +# 测试环境变量 | ||
| 292 | +cd ~/langgraph | ||
| 293 | +source venv/bin/activate | ||
| 294 | +python -c "import os; from dotenv import load_dotenv; load_dotenv(); print(os.getenv('OPENAI_API_KEY'))" | ||
| 295 | +``` | ||
| 296 | + | ||
| 297 | +## 常用命令速查 | ||
| 298 | + | ||
| 299 | +```bash | ||
| 300 | +# 启动服务 | ||
| 301 | +~/langgraph/deploy/start.sh | ||
| 302 | + | ||
| 303 | +# 停止服务 | ||
| 304 | +~/langgraph/deploy/stop.sh | ||
| 305 | + | ||
| 306 | +# 重启服务 | ||
| 307 | +~/langgraph/deploy/restart.sh | ||
| 308 | + | ||
| 309 | +# 查看状态 | ||
| 310 | +ps aux | grep start_server_direct | grep -v grep | ||
| 311 | + | ||
| 312 | +# 查看日志 | ||
| 313 | +tail -f ~/langgraph/logs/app.log | ||
| 314 | + | ||
| 315 | +# 测试服务 | ||
| 316 | +curl http://localhost:2025/ok | ||
| 317 | +``` | ||
| 318 | + | ||
| 319 | +## 注意事项 | ||
| 320 | + | ||
| 321 | +1. **端口权限**:端口 2025 > 1024,普通用户可以使用,无需 root | ||
| 322 | +2. **目录权限**:确保 `~/langgraph` 目录有读写权限 | ||
| 323 | +3. **日志轮转**:定期清理日志文件,避免占用过多磁盘空间 | ||
| 324 | +4. **进程监控**:建议定期检查进程是否正常运行 | ||
| 325 | +5. **备份**:定期备份代码和 `.env` 文件 | ||
| 326 | + | ||
| 327 | +## 部署检查清单 | ||
| 328 | + | ||
| 329 | +- [ ] 代码已上传到 `~/langgraph` | ||
| 330 | +- [ ] 虚拟环境已创建 | ||
| 331 | +- [ ] 依赖已安装 | ||
| 332 | +- [ ] `.env` 文件已配置 API 密钥 | ||
| 333 | +- [ ] 服务已启动 | ||
| 334 | +- [ ] 可以访问 `http://服务器IP:2025/ok` | ||
| 335 | +- [ ] 日志输出正常 | ||
| 336 | +- [ ] 阿里云安全组已开放端口 2025 |
deploy/langgraph.service
0 → 100644
| 1 | +[Unit] | ||
| 2 | +Description=LangGraph Application | ||
| 3 | +After=network.target | ||
| 4 | + | ||
| 5 | +[Service] | ||
| 6 | +Type=simple | ||
| 7 | +User=root | ||
| 8 | +WorkingDirectory=/opt/langgraph | ||
| 9 | +Environment="PATH=/opt/langgraph/venv/bin" | ||
| 10 | +EnvironmentFile=/opt/langgraph/.env | ||
| 11 | +ExecStart=/opt/langgraph/venv/bin/python /opt/langgraph/start_server_direct.py | ||
| 12 | +Restart=always | ||
| 13 | +RestartSec=10 | ||
| 14 | +StandardOutput=journal | ||
| 15 | +StandardError=journal | ||
| 16 | + | ||
| 17 | +[Install] | ||
| 18 | +WantedBy=multi-user.target | ||
| 19 | + |
deploy/nginx.conf
0 → 100644
| 1 | +server { | ||
| 2 | + listen 80; | ||
| 3 | + server_name _; | ||
| 4 | + | ||
| 5 | + client_max_body_size 50M; | ||
| 6 | + | ||
| 7 | + location / { | ||
| 8 | + proxy_pass http://127.0.0.1:2025; | ||
| 9 | + proxy_http_version 1.1; | ||
| 10 | + proxy_set_header Upgrade $http_upgrade; | ||
| 11 | + proxy_set_header Connection 'upgrade'; | ||
| 12 | + proxy_set_header Host $host; | ||
| 13 | + proxy_set_header X-Real-IP $remote_addr; | ||
| 14 | + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | ||
| 15 | + proxy_cache_bypass $http_upgrade; | ||
| 16 | + } | ||
| 17 | + | ||
| 18 | + location /ws { | ||
| 19 | + proxy_pass http://127.0.0.1:2025; | ||
| 20 | + proxy_http_version 1.1; | ||
| 21 | + proxy_set_header Upgrade $http_upgrade; | ||
| 22 | + proxy_set_header Connection "upgrade"; | ||
| 23 | + proxy_set_header Host $host; | ||
| 24 | + } | ||
| 25 | +} | ||
| 26 | + |
deploy/restart.sh
0 → 100644
deploy/start.sh
0 → 100644
| 1 | +#!/bin/bash | ||
| 2 | +# 启动 LangGraph 服务 | ||
| 3 | + | ||
| 4 | +APP_DIR="$HOME/langgraph" | ||
| 5 | +LOG_DIR="$APP_DIR/logs" | ||
| 6 | +PID_FILE="$LOG_DIR/app.pid" | ||
| 7 | +LOG_FILE="$LOG_DIR/app.log" | ||
| 8 | + | ||
| 9 | +# 创建日志目录 | ||
| 10 | +mkdir -p "$LOG_DIR" | ||
| 11 | + | ||
| 12 | +# 检查是否已在运行 | ||
| 13 | +if [ -f "$PID_FILE" ]; then | ||
| 14 | + PID=$(cat "$PID_FILE") | ||
| 15 | + if ps -p "$PID" > /dev/null 2>&1; then | ||
| 16 | + echo "服务已在运行 (PID: $PID)" | ||
| 17 | + exit 1 | ||
| 18 | + else | ||
| 19 | + rm -f "$PID_FILE" | ||
| 20 | + fi | ||
| 21 | +fi | ||
| 22 | + | ||
| 23 | +# 检查应用目录 | ||
| 24 | +if [ ! -d "$APP_DIR" ]; then | ||
| 25 | + echo "错误: 应用目录不存在: $APP_DIR" | ||
| 26 | + exit 1 | ||
| 27 | +fi | ||
| 28 | + | ||
| 29 | +# 进入应用目录 | ||
| 30 | +cd "$APP_DIR" || exit 1 | ||
| 31 | + | ||
| 32 | +# 激活虚拟环境 | ||
| 33 | +if [ ! -d "venv" ]; then | ||
| 34 | + echo "错误: 虚拟环境不存在,请先创建虚拟环境" | ||
| 35 | + exit 1 | ||
| 36 | +fi | ||
| 37 | + | ||
| 38 | +source venv/bin/activate | ||
| 39 | + | ||
| 40 | +# 检查 .env 文件 | ||
| 41 | +if [ ! -f ".env" ]; then | ||
| 42 | + echo "警告: .env 文件不存在,请先配置环境变量" | ||
| 43 | +fi | ||
| 44 | + | ||
| 45 | +# 启动服务 | ||
| 46 | +echo "正在启动 LangGraph 服务..." | ||
| 47 | +nohup python start_server_direct.py > "$LOG_FILE" 2>&1 & | ||
| 48 | +PID=$! | ||
| 49 | + | ||
| 50 | +# 保存进程ID | ||
| 51 | +echo $PID > "$PID_FILE" | ||
| 52 | + | ||
| 53 | +# 等待一下,检查进程是否启动成功 | ||
| 54 | +sleep 2 | ||
| 55 | +if ps -p "$PID" > /dev/null 2>&1; then | ||
| 56 | + echo "✅ 服务已启动 (PID: $PID)" | ||
| 57 | + echo "📝 日志文件: $LOG_FILE" | ||
| 58 | + echo "🌐 访问地址: http://$(hostname -I | awk '{print $1}'):2025" | ||
| 59 | + echo "📊 查看日志: tail -f $LOG_FILE" | ||
| 60 | +else | ||
| 61 | + echo "❌ 服务启动失败,请查看日志: $LOG_FILE" | ||
| 62 | + rm -f "$PID_FILE" | ||
| 63 | + exit 1 | ||
| 64 | +fi | ||
| 65 | + |
deploy/status.sh
0 → 100644
| 1 | +#!/bin/bash | ||
| 2 | +# 查看 LangGraph 服务状态 | ||
| 3 | + | ||
| 4 | +APP_DIR="$HOME/langgraph" | ||
| 5 | +PID_FILE="$APP_DIR/logs/app.pid" | ||
| 6 | + | ||
| 7 | +echo "LangGraph 服务状态" | ||
| 8 | +echo "==================" | ||
| 9 | +echo "" | ||
| 10 | + | ||
| 11 | +if [ -f "$PID_FILE" ]; then | ||
| 12 | + PID=$(cat "$PID_FILE") | ||
| 13 | + if ps -p "$PID" > /dev/null 2>&1; then | ||
| 14 | + echo "✅ 服务正在运行" | ||
| 15 | + echo " PID: $PID" | ||
| 16 | + echo " 进程信息:" | ||
| 17 | + ps -p "$PID" -o pid,ppid,cmd,etime,pcpu,pmem | ||
| 18 | + echo "" | ||
| 19 | + echo "📊 端口监听:" | ||
| 20 | + netstat -tlnp 2>/dev/null | grep ":2025 " || ss -tlnp 2>/dev/null | grep ":2025 " || echo " 未检测到端口监听" | ||
| 21 | + echo "" | ||
| 22 | + echo "📝 日志文件: $APP_DIR/logs/app.log" | ||
| 23 | + echo "" | ||
| 24 | + echo "🧪 测试连接:" | ||
| 25 | + if curl -s http://localhost:2025/ok > /dev/null 2>&1; then | ||
| 26 | + echo " ✅ 服务响应正常" | ||
| 27 | + else | ||
| 28 | + echo " ⚠️ 服务无响应" | ||
| 29 | + fi | ||
| 30 | + else | ||
| 31 | + echo "❌ 服务未运行(PID 文件存在但进程不存在)" | ||
| 32 | + rm -f "$PID_FILE" | ||
| 33 | + fi | ||
| 34 | +else | ||
| 35 | + echo "❌ 服务未运行" | ||
| 36 | + PID=$(ps aux | grep start_server_direct.py | grep -v grep | awk '{print $2}' | head -1) | ||
| 37 | + if [ -n "$PID" ]; then | ||
| 38 | + echo " 警告: 发现未管理的进程 (PID: $PID)" | ||
| 39 | + echo " 使用以下命令停止: kill $PID" | ||
| 40 | + fi | ||
| 41 | +fi | ||
| 42 | + |
deploy/stop.sh
0 → 100644
| 1 | +#!/bin/bash | ||
| 2 | +# 停止 LangGraph 服务 | ||
| 3 | + | ||
| 4 | +APP_DIR="$HOME/langgraph" | ||
| 5 | +PID_FILE="$APP_DIR/logs/app.pid" | ||
| 6 | + | ||
| 7 | +if [ ! -f "$PID_FILE" ]; then | ||
| 8 | + echo "PID 文件不存在,尝试查找进程..." | ||
| 9 | + PID=$(ps aux | grep start_server_direct.py | grep -v grep | awk '{print $2}' | head -1) | ||
| 10 | + if [ -z "$PID" ]; then | ||
| 11 | + echo "服务未运行" | ||
| 12 | + exit 0 | ||
| 13 | + fi | ||
| 14 | +else | ||
| 15 | + PID=$(cat "$PID_FILE") | ||
| 16 | +fi | ||
| 17 | + | ||
| 18 | +if ps -p "$PID" > /dev/null 2>&1; then | ||
| 19 | + echo "正在停止服务 (PID: $PID)..." | ||
| 20 | + kill "$PID" | ||
| 21 | + | ||
| 22 | + # 等待进程结束 | ||
| 23 | + for i in {1..10}; do | ||
| 24 | + if ! ps -p "$PID" > /dev/null 2>&1; then | ||
| 25 | + echo "✅ 服务已停止" | ||
| 26 | + rm -f "$PID_FILE" | ||
| 27 | + exit 0 | ||
| 28 | + fi | ||
| 29 | + sleep 1 | ||
| 30 | + done | ||
| 31 | + | ||
| 32 | + # 如果还在运行,强制杀死 | ||
| 33 | + if ps -p "$PID" > /dev/null 2>&1; then | ||
| 34 | + echo "强制停止服务..." | ||
| 35 | + kill -9 "$PID" | ||
| 36 | + sleep 1 | ||
| 37 | + fi | ||
| 38 | + | ||
| 39 | + rm -f "$PID_FILE" | ||
| 40 | + echo "✅ 服务已停止" | ||
| 41 | +else | ||
| 42 | + echo "服务未运行" | ||
| 43 | + rm -f "$PID_FILE" | ||
| 44 | +fi | ||
| 45 | + |
-
Please register or login to post a comment