60 lines
2.7 KiB
Python
60 lines
2.7 KiB
Python
"""把改完的 enrichment.py 复制到服务器,重建 worker,重启"""
|
|
import os, paramiko
|
|
c = paramiko.SSHClient()
|
|
c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
|
c.connect("207.57.129.228", port=19717, username="root",
|
|
password=os.environ["REMOTE_PASS"],
|
|
timeout=30, allow_agent=False, look_for_keys=False)
|
|
|
|
|
|
def run(label, cmd, timeout=180):
|
|
print(f"\n=== {label} ===")
|
|
si, so, se = c.exec_command(cmd, timeout=timeout)
|
|
out = so.read().decode(errors="replace")
|
|
err = se.read().decode(errors="replace")
|
|
rc = so.channel.recv_exit_status()
|
|
if out.strip(): print(out.rstrip())
|
|
if err.strip(): print(f"[stderr] {err.rstrip()}")
|
|
print(f"-> rc={rc}")
|
|
|
|
|
|
# 1) 复制改完的 enrichment.py 到服务器
|
|
import base64
|
|
# 本地读改完的 enrichment.py
|
|
local = r"D:\selftools\diary-news\backend\app\services\llm\enrichment.py"
|
|
with open(local, encoding="utf-8") as f:
|
|
content = f.read()
|
|
b64 = base64.b64encode(content.encode("utf-8")).decode("ascii")
|
|
si, so, se = c.exec_command(f"bash -lc 'mkdir -p /srv/news/backend/app/services/llm && echo {b64} | base64 -d > /srv/news/backend/app/services/llm/enrichment.py.new && wc -l /srv/news/backend/app/services/llm/enrichment.py.new'", timeout=30)
|
|
print("=== 1) 复制 enrichment.py.new ===")
|
|
print(so.read().decode(errors="replace").rstrip())
|
|
|
|
# 备份原文件再覆盖
|
|
si, so, se = c.exec_command("bash -lc 'cd /srv/news/backend/app/services/llm && cp -f enrichment.py enrichment.py.bak.$(date +%Y%m%d_%H%M%S) && mv enrichment.py.new enrichment.py && ls -la enrichment.py*'", timeout=10)
|
|
print("\n=== 2) 备份 + 覆盖 ===")
|
|
print(so.read().decode(errors="replace").rstrip())
|
|
|
|
# 3) 重建 worker 镜像
|
|
run("3) docker compose build worker(增量,会很快)", "cd /srv/news && docker compose build worker", timeout=180)
|
|
|
|
# 4) 重启 worker
|
|
run("4) docker compose up -d worker(只重启 worker)", "cd /srv/news && docker compose up -d worker", timeout=60)
|
|
|
|
# 5) 等启动
|
|
run("5) 等 5 秒", "sleep 5 && date '+%H:%M:%S'")
|
|
|
|
# 6) 看 enrichment_loop 启动
|
|
run("6) enrichment_loop 启动日志", "cd /srv/news && docker compose logs --tail=20 worker 2>&1 | grep -iE 'enrich|started|enabled'")
|
|
|
|
# 7) 等 30 秒,看是否开始 enrich
|
|
run("7) 等 30 秒", "sleep 30 && date '+%H:%M:%S'")
|
|
|
|
# 8) 看是否有 enrich_article 日志
|
|
run("8) enrich_article 日志", "cd /srv/news && docker compose logs --tail=200 worker 2>&1 | grep -E 'enrich_article|classify|commentary' | head -20")
|
|
|
|
# 9) 看 n/a 数量变化
|
|
run("9) 当前 n/a 数量", "cd /srv/news && docker compose exec -T postgres psql -U news -d news -c \"SELECT classify_status, count(*) FROM articles GROUP BY classify_status ORDER BY count(*) DESC;\"")
|
|
|
|
c.close()
|
|
print("\n🎉 修复完成")
|