50 lines
1.9 KiB
Bash
50 lines
1.9 KiB
Bash
#!/usr/bin/env bash
|
|
# deploy_server.py kintex 블록 복원 원샷 (소유자 승인 2026-07-24)
|
|
# 실행: bash deploy/restore_kintex_block.sh
|
|
# 동작: 서버 내부에서 백업 → repo 정본 블록 추출 → 앵커 앞 삽입 → py_compile → 서비스 재시작 → 실패 시 롤백
|
|
set -euo pipefail
|
|
KEY="$HOME/.ssh/guardia_server"
|
|
ssh -i "$KEY" -o IdentitiesOnly=yes -o BatchMode=yes root@101.79.17.164 python3 - <<'PYEOF'
|
|
import re, subprocess, shutil, sys, py_compile
|
|
|
|
TARGET = "/opt/zioinfo/deploy_server.py"
|
|
BLOCK_SRC = "/opt/kintex/src/deploy/deploy_server_kintex_block.py"
|
|
BACKUP = TARGET + ".bak_kintexfix"
|
|
ANCHOR = 'logging.info(f"=== {repo} 배포 완료 ===")'
|
|
|
|
body = open(TARGET, encoding="utf-8").read()
|
|
if 'elif repo == "kintex"' in body:
|
|
print("SKIP: kintex 블록이 이미 존재"); sys.exit(0)
|
|
|
|
raw = open(BLOCK_SRC, encoding="utf-8").read()
|
|
m = re.search(r"'''\n(.*?)'''", raw, re.S)
|
|
if not m:
|
|
print("FAIL: 블록 추출 실패"); sys.exit(1)
|
|
block = m.group(1)
|
|
|
|
if ANCHOR not in body:
|
|
print("FAIL: 앵커 미발견"); sys.exit(1)
|
|
|
|
shutil.copy2(TARGET, BACKUP)
|
|
idx = body.index(ANCHOR)
|
|
line_start = body.rfind("\n", 0, idx) + 1
|
|
indent = body[line_start:idx]
|
|
new_body = body[:line_start] + block + indent + ANCHOR + body[idx + len(ANCHOR):]
|
|
open(TARGET, "w", encoding="utf-8").write(new_body)
|
|
|
|
try:
|
|
py_compile.compile(TARGET, doraise=True)
|
|
except Exception as e:
|
|
shutil.copy2(BACKUP, TARGET)
|
|
print(f"FAIL: py_compile 실패 → 백업 롤백 완료: {e}"); sys.exit(1)
|
|
|
|
r = subprocess.run(["systemctl", "restart", "zioinfo-deploy"])
|
|
if r.returncode != 0:
|
|
shutil.copy2(BACKUP, TARGET)
|
|
subprocess.run(["systemctl", "restart", "zioinfo-deploy"])
|
|
print("FAIL: 재시작 실패 → 백업 롤백 후 재기동"); sys.exit(1)
|
|
|
|
act = subprocess.run(["systemctl", "is-active", "zioinfo-deploy"], capture_output=True, text=True)
|
|
print(f"OK: kintex 블록 삽입 + py_compile 통과 + zioinfo-deploy {act.stdout.strip()}")
|
|
PYEOF
|