44 lines
1.2 KiB
Python
44 lines
1.2 KiB
Python
|
|
import paramiko, time
|
||
|
|
|
||
|
|
NAS_HOST = "100.85.152.112"
|
||
|
|
NAS_PORT = 22
|
||
|
|
NAS_USER = "simon"
|
||
|
|
NAS_PASS = "Nas82829330"
|
||
|
|
NAS_DEPLOY_PATH = "/volume1/docker/gaokao-portal"
|
||
|
|
DOCKER_BIN = "/usr/local/bin/docker"
|
||
|
|
|
||
|
|
c = paramiko.SSHClient()
|
||
|
|
c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
||
|
|
c.connect(NAS_HOST, NAS_PORT, NAS_USER, NAS_PASS, timeout=20)
|
||
|
|
|
||
|
|
# 使用 shell 执行
|
||
|
|
def shell(cmd):
|
||
|
|
"""通过 shell 执行,返回完整输出"""
|
||
|
|
transport = c.get_transport()
|
||
|
|
channel = transport.open_session()
|
||
|
|
channel.get_pty() # 获取 PTY
|
||
|
|
channel.exec_command(cmd)
|
||
|
|
|
||
|
|
# 读取输出
|
||
|
|
out = b""
|
||
|
|
while True:
|
||
|
|
if channel.recv_ready():
|
||
|
|
out += channel.recv(4096)
|
||
|
|
if channel.exit_status_ready():
|
||
|
|
break
|
||
|
|
time.sleep(0.5)
|
||
|
|
while channel.recv_ready():
|
||
|
|
out += channel.recv(4096)
|
||
|
|
|
||
|
|
return out.decode("utf-8", errors="replace")
|
||
|
|
|
||
|
|
# 1. 检查容器状态
|
||
|
|
print(shell(f"echo {NAS_PASS} | sudo -S {DOCKER_BIN} ps -a"))
|
||
|
|
|
||
|
|
# 2. 检查后端是否在运行
|
||
|
|
print(shell(f"echo {NAS_PASS} | sudo -S {DOCKER_BIN} ps | grep backend"))
|
||
|
|
|
||
|
|
# 3. 启动后端并查看日志
|
||
|
|
print(shell(f"cd {NAS_DEPLOY_PATH} && echo {NAS_PASS} | sudo -S {DOCKER_BIN} compose logs backend 2>&1 | tail -30"))
|
||
|
|
|
||
|
|
c.close()
|