#!/usr/bin/env python3 # -*- coding: utf-8 -*- import paramiko import time client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect('42.194.232.22', port=22022, username='root', password='Zhiqun1984', timeout=15) print("=== 1. 杀死所有相关进程 ===") cmd = "kill -9 1822 2>/dev/null || echo 'Process 1822 already killed'" stdin, stdout, stderr = client.exec_command(cmd, timeout=10) result = stdout.read().decode('utf-8', errors='replace') print(result) time.sleep(1) print("\n=== 2. 确认端口清理完成 ===") cmd = "ss -tlnp | grep ':300' || echo '[OK] All ports cleared'" stdin, stdout, stderr = client.exec_command(cmd, timeout=10) result = stdout.read().decode('utf-8', errors='replace') print(result) print("\n=== 3. 删除 PM2 soul 配置 ===") cmd = "pm2 delete soul 2>&1" stdin, stdout, stderr = client.exec_command(cmd, timeout=10) result = stdout.read().decode('utf-8', errors='replace') result = result.encode('ascii', errors='replace').decode('ascii') print(result) time.sleep(1) print("\n=== 4. 使用正确配置重新启动 ===") cmd = """cd /www/wwwroot/soul && PORT=30006 pm2 start server.js --name soul --update-env 2>&1""" stdin, stdout, stderr = client.exec_command(cmd, timeout=10) result = stdout.read().decode('utf-8', errors='replace') result = result.encode('ascii', errors='replace').decode('ascii') print(result) time.sleep(3) print("\n=== 5. 检查 PM2 状态 ===") cmd = "pm2 status soul 2>&1" stdin, stdout, stderr = client.exec_command(cmd, timeout=10) result = stdout.read().decode('utf-8', errors='replace') result = result.encode('ascii', errors='replace').decode('ascii') print(result) print("\n=== 6. 确认端口 30006 监听 ===") cmd = "ss -tlnp | grep ':30006'" stdin, stdout, stderr = client.exec_command(cmd, timeout=10) result = stdout.read().decode('utf-8', errors='replace') print(result if result else "[X] Port 30006 not listening!") print("\n=== 7. 测试 HTTP 响应 ===") cmd = "curl -I http://127.0.0.1:30006 2>&1 | head -5" stdin, stdout, stderr = client.exec_command(cmd, timeout=10) result = stdout.read().decode('utf-8', errors='replace') print(result) print("\n=== 8. 查看最新日志 ===") cmd = "pm2 logs soul --lines 10 --nostream 2>&1 | tail -15" stdin, stdout, stderr = client.exec_command(cmd, timeout=10) result = stdout.read().decode('utf-8', errors='replace') result = result.encode('ascii', errors='replace').decode('ascii') print(result) print("\n=== 9. 保存 PM2 配置 ===") cmd = "pm2 save 2>&1" stdin, stdout, stderr = client.exec_command(cmd, timeout=10) result = stdout.read().decode('utf-8', errors='replace') result = result.encode('ascii', errors='replace').decode('ascii') print(result) client.close() print("\n" + "=" * 60) print("完成!请在浏览器访问: https://soul.quwanzhi.com") print("如果仍是空白,按 Ctrl+Shift+R 强制刷新")