71 lines
2.1 KiB
Python
71 lines
2.1 KiB
Python
#!/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() |