| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- import subprocess
- import sys
- from pathlib import Path
- def run_and_print(cmd, cwd):
- """运行命令并打印其输出,返回是否成功"""
- print(f"$ {' '.join(cmd)}")
- result = subprocess.run(cmd, cwd=cwd, text=True, capture_output=True)
- if result.stdout:
- print(result.stdout.strip())
- if result.stderr:
- print(result.stderr.strip(), file=sys.stderr)
- return result.returncode == 0
- def main():
- if len(sys.argv) < 2 or sys.argv[1] not in {"start", "status", "stop"}:
- print("用法: python manage_tunnels.py [start|status|stop]")
- sys.exit(1)
- action = sys.argv[1]
- base = Path(__file__).resolve().parent
- python_exe = sys.executable # 使用当前 Python 解释器
- ssh_script = str(base / "ssh_tunnel.py")
- # 定义三条启动命令
- start_cmds = [
- #
- [python_exe, ssh_script, "start", "-H", "117.50.195.224", "-u", "root", "-p", "29765", "-D", "1066"],
- #ali
- [python_exe, ssh_script, "start", "-H", "106.14.113.12", "-u", "root", "-p", "29765", "-D", "1067"],
- #wu
- [python_exe, ssh_script, "start", "-H", "114.66.42.82", "-u", "root", "-p", "29765", "-D", "1068"],
- #home
- [python_exe, ssh_script, "start", "-H", "117.50.195.224", "-u", "root", "-p", "10702", "-D", "1024"],
- #sea
- [python_exe, ssh_script, "start", "-H", "117.50.195.224", "-u", "root", "-p", "10802", "-D", "1069"],
- #wu
- [python_exe, ssh_script, "start", "-H", "114.66.42.82", "-u", "root", "-p", "17002", "-D", "1070"],
-
- [python_exe, ssh_script, "start", "-H", "114.66.42.82", "-u", "root", "-p", "18000", "-D", "1071"],
- ]
- # 对应三个状态监控命令(包含示例中的 -D 1067)
- status_cmds = [
- # [python_exe, ssh_script, "status", "-D", "1061"],
- [python_exe, ssh_script, "status", "-D", "1066"],
- [python_exe, ssh_script, "status", "-D", "1067"],
- [python_exe, ssh_script, "status", "-D", "1024"], # 示例指定的状态监控
- ]
- # 停止服务命令(示例指定的停止 117.50.195.224:29765 -> -D 1066)
- stop_cmds = [
- # [python_exe, ssh_script, "stop", "-H", "103.40.13.87", "-u", "root", "-p", "40268", "-D", "1061"],
- [python_exe, ssh_script, "stop", "-H", "117.50.195.224", "-u", "root", "-p", "29765", "-D", "1066"],
- [python_exe, ssh_script, "stop", "-H", "106.14.113.12", "-u", "root", "-p", "29765", "-D", "1067"],
- [python_exe, ssh_script, "stop", "-H", "114.66.42.82", "-u", "root", "-p", "29765", "-D", "1068"],
- [python_exe, ssh_script, "stop", "-H", "117.50.195.224", "-u", "root", "-p", "10702", "-D", "1024"],
- [python_exe, ssh_script, "stop", "-H", "117.50.195.224", "-u", "root", "-p", "10802", "-D", "1069"],
- [python_exe, ssh_script, "stop", "-H", "114.66.42.82", "-u", "root", "-p", "17002", "-D", "1070"],
- [python_exe, ssh_script, "stop", "-H", "114.66.42.82", "-u", "root", "-p", "18000", "-D", "1071"],
- ]
- if action == "start":
- procs = []
- for cmd in start_cmds:
- # 并行启动,不阻塞
- p = subprocess.Popen(cmd, cwd=base)
- procs.append(p)
- print(f"已启动 {len(procs)} 个隧道进程,PID:{[p.pid for p in procs]}")
- # 如果希望脚本阻塞直到进程退出,取消下面两行注释
- # for p in procs:
- # p.wait()
- elif action == "status":
- all_ok = True
- for cmd in status_cmds:
- ok = run_and_print(cmd, base)
- all_ok = all_ok and ok
- if not all_ok:
- sys.exit(1)
- elif action == "stop":
- all_ok = True
- for cmd in stop_cmds:
- ok = run_and_print(cmd, base)
- all_ok = all_ok and ok
- if all_ok:
- print("停止命令已执行完成")
- else:
- print("部分停止命令执行失败", file=sys.stderr)
- sys.exit(1)
- if __name__ == "__main__":
- main()
- #启动命令 python .\run_tunnels.py start
|