Files
xiaoxia-saas/scripts/fix_new_server_env.py
T
xiaoxia 849ea35413
Check New Server Env / check (push) Successful in 7s
Downgrade New Runners to v0.2.6 / downgrade (push) Failing after 14s
add: fix new server env via cmd agent
2026-07-13 18:39:36 +08:00

79 lines
2.5 KiB
Python

#!/usr/bin/env python3
"""通过CMD Agent修复新服务器环境:安装Node.js、确认系统信息"""
import subprocess
import json
import urllib.request
import time
NEW_SERVER = "172.30.18.199"
API_KEY = "xiaoxia-cmd-agent-2026"
def cmd(cmd_str, timeout=120):
url = f"http://{NEW_SERVER}:5927/cmd"
data = json.dumps({"cmd": cmd_str, "timeout": timeout}).encode()
req = urllib.request.Request(url, data=data, method="POST")
req.add_header("Content-Type", "application/json")
req.add_header("X-API-Key", API_KEY)
try:
with urllib.request.urlopen(req, timeout=timeout+10) as resp:
result = json.loads(resp.read().decode())
return result.get("returncode", -1), result.get("stdout", ""), result.get("stderr", "")
except Exception as e:
return -1, "", str(e)
print("=" * 50)
print("步骤1: 系统信息确认")
print("=" * 50)
rc, out, err = cmd("cat /etc/os-release | head -5 && echo '---' && uname -a && echo '---' && which yum dnf apt-get 2>/dev/null || true")
print(out[:500])
print("\n" + "=" * 50)
print("步骤2: 用yum安装Node.js 20 (nodesource)")
print("=" * 50)
# CentOS用curl下载nodesource的rpm包或者直接用yum模块
rc, out, err = cmd("""
# 先试curl下载Node.js二进制包(最稳妥,不依赖包管理器)
cd /tmp
curl -fsSL https://nodejs.org/dist/v20.15.0/node-v20.15.0-linux-x64.tar.xz -o node.tar.xz 2>&1 | tail -3
ls -lh node.tar.xz
""", timeout=120)
print(f"下载结果 RC={rc}")
print(out[:500])
if rc != 0:
print(f"ERR: {err[:300]}")
print("\n" + "=" * 50)
print("步骤3: 解压并安装到/usr/local")
print("=" * 50)
rc, out, err = cmd("""
cd /tmp
tar -xf node.tar.xz
mv node-v20.15.0-linux-x64 /usr/local/node
ln -sf /usr/local/node/bin/node /usr/local/bin/node
ln -sf /usr/local/node/bin/npm /usr/local/bin/npm
ln -sf /usr/local/node/bin/npx /usr/local/bin/npx
node --version
npm --version
which node
""", timeout=60)
print(f"RC={rc}")
print(out[:300])
if err and rc != 0:
print(f"ERR: {err[:200]}")
print("\n" + "=" * 50)
print("步骤4: 验证Node.js可用")
print("=" * 50)
rc, out, err = cmd("node -e 'console.log(\"node works: \" + process.version)'")
print(f"RC={rc}: {out.strip()}")
print("\n" + "=" * 50)
print("步骤5: 检查Runner进程和配置")
print("=" * 50)
rc, out, err = cmd("systemctl list-units 'act-runner-*' --no-legend | head -10 && echo '---' && ps aux | grep act_runner | grep -v grep | wc -l")
print(out[:500])
print("\n" + "=" * 50)
print("全部完成!")
print("=" * 50)