Files
sanguo_vnpy/scripts/utils/clean_ports_in_container.py
T
2026-04-12 10:20:09 +08:00

71 lines
2.1 KiB
Python
Executable File

#!/usr/bin/env python3
"""
在容器内清理占用端口的进程
"""
import subprocess
import sys
def main():
"""主函数"""
print("🧹 在容器内清理占用端口的进程...")
print("="*60)
# 使用Python在容器内检测并关闭进程
script = '''
import psutil
import socket
def get_pid_using_port(port):
"""获取占用指定端口的PID"""
for conn in psutil.net_connections():
if conn.laddr.port == port:
return conn.pid
return None
ports = [8001, 8088]
for port in ports:
pid = get_pid_using_port(port)
if pid:
print(f"✅ 端口 {port} 被PID {pid} 占用,正在杀死...")
try:
process = psutil.Process(pid)
process.terminate()
process.wait(timeout=3)
print(f" ✅ 已杀死PID {pid}")
except Exception as e:
print(f" ⚠️ 杀死PID {pid} 失败: {e}")
else:
print(f"✅ 端口 {port} 未被占用")
print("\\n🧹 清理完成,现在启动新服务...")
'''
# 执行清理脚本
cmd = f'''ssh admin@192.168.2.154 "export PATH=$PATH:/var/packages/Docker/target/usr/bin && docker exec sanguo_vnpy python3 -c '{script}'"'''
print(f"执行清理...")
subprocess.run(cmd, shell=True)
print("\n🚀 启动新服务...")
# 启动RPC服务
rpc_cmd = f'''ssh admin@192.168.2.154 "export PATH=$PATH:/var/packages/Docker/target/usr/bin && docker exec sanguo_vnpy bash -c 'python3 /app/scripts/test_server_final_fixed.py &'"'''
subprocess.run(rpc_cmd, shell=True)
# 等待
import time
time.sleep(3)
# 启动API服务
api_cmd = f'''ssh admin@192.168.2.154 "export PATH=$PATH:/var/packages/Docker/target/usr/bin && docker exec sanguo_vnpy bash -c 'cd /app/scripts && python3 -m uvicorn backtest_api_fixed:app --host 0.0.0.0 --port 8088 &'"'''
subprocess.run(api_cmd, shell=True)
time.sleep(3)
print("\n" + "="*60)
print("✅ 清理和重启完成!")
print("请测试回测API...")
print("="*60)
if __name__ == "__main__":
main()