예제 소스
바둑 on-policy 학습: 대국 로그를 KataGo 라벨로 바꾸기 · 파일 169개
install_mariago_launchd.sh
#!/usr/bin/env bash
# MariaGO 데몬을 launchd에 등록 — Cursor/터미널 없이도 터널·외부점검 유지
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
UID_NUM="$(id -u)"
GUI="gui/$UID_NUM"
LA_DIR="$HOME/Library/LaunchAgents"
SUPPORT="$HOME/Library/Application Support/MariGO"
LOGS="$HOME/Library/Logs/MariGO"
PY="$ROOT/.venv/bin/python"
if [[ ! -x "$PY" ]]; then
echo "venv python not found: $PY" >&2
exit 1
fi
mkdir -p "$LA_DIR" "$SUPPORT" "$LOGS" "$ROOT/logs/mariago_launchd"
write_wrapper() {
local name="$1"
shift
local script="$SUPPORT/$name.sh"
local log="$LOGS/${name}.log"
cat >"$script" <<EOF
#!/bin/zsh
set -euo pipefail
ROOT="$ROOT"
PY="$PY"
LOG="$log"
PATH_EXTRA="$HOME/.nvm/versions/node/v24.14.1/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
until [[ -d "\$ROOT" ]]; do
echo "\$(date '+%Y-%m-%d %H:%M:%S') waiting for \$ROOT" >>"\$LOG"
sleep 30
done
mkdir -p "\$(dirname "\$LOG")"
cd "\$ROOT"
export PYTHONUNBUFFERED=1
export HF_HOME="\$ROOT/vlm_models"
export HF_HUB_CACHE="\$ROOT/vlm_models"
export TOKENIZERS_PARALLELISM=false
export PATH="\$PATH_EXTRA"
exec "\$PY" $* >>"\$LOG" 2>&1
EOF
chmod +x "$script"
echo "wrote $script"
}
write_plist() {
local label="$1"
local script="$2"
local out="$LA_DIR/$label.plist"
cat >"$out" <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>${label}</string>
<key>ProgramArguments</key>
<array>
<string>/bin/zsh</string>
<string>${script}</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>ThrottleInterval</key>
<integer>15</integer>
<key>StandardOutPath</key>
<string>${LOGS}/${label#com.mariago.}.stdout.log</string>
<key>StandardErrorPath</key>
<string>${LOGS}/${label#com.mariago.}.stderr.log</string>
</dict>
</plist>
EOF
echo "wrote $out"
}
stop_label() {
local label="$1"
launchctl bootout "$GUI" "$LA_DIR/$label.plist" 2>/dev/null || true
}
start_label() {
local label="$1"
launchctl bootstrap "$GUI" "$LA_DIR/$label.plist"
launchctl enable "$GUI/$label" 2>/dev/null || true
}
echo "== MariaGO launchd install =="
echo "ROOT=$ROOT"
echo "PY=$PY"
# 수동/Cursor 실행 중복 방지
pkill -f 'daemon_ssh_reverse_tunnel.py' 2>/dev/null || true
pkill -f 'daemon_mariago_external_probe.py' 2>/dev/null || true
sleep 2
write_wrapper run-tunnel-watchdog scripts/daemon_ssh_reverse_tunnel.py
write_wrapper run-external-probe scripts/daemon_mariago_external_probe.py --interval 30 --recover
write_wrapper run-vlm-serve -m vlm_server serve --host 127.0.0.1 --port 9319 --model vlm_models/Qwen__Qwen3-VL-8B-Instruct --lora-dir vlm_models/lora_mix_qwen_r5 --text-only-move --board-repr aligned --score-guided --score-min-line 3 --illegal-retry-max 16 --illegal-retry-budget-s 240 --log-jsonl logs/vlm_eval_day/play_r5.jsonl
write_wrapper run-web-watchdog scripts/daemon_mariago_web_watchdog.py
write_plist com.mariago.tunnel-watchdog "$SUPPORT/run-tunnel-watchdog.sh"
write_plist com.mariago.external-probe "$SUPPORT/run-external-probe.sh"
write_plist com.mariago.vlm-serve "$SUPPORT/run-vlm-serve.sh"
write_plist com.mariago.web-watchdog "$SUPPORT/run-web-watchdog.sh"
# 수동/Cursor 중복 워치독 정리
pkill -f 'daemon_mariago_web_watchdog.py' 2>/dev/null || true
for label in com.mariago.tunnel-watchdog com.mariago.external-probe com.mariago.vlm-serve com.mariago.web-watchdog; do
stop_label "$label"
start_label "$label"
done
sleep 4
echo ""
echo "== launchd status =="
for label in com.mariago.tunnel-watchdog com.mariago.external-probe com.mariago.vlm-serve com.mariago.web-watchdog; do
launchctl print "$GUI/$label" 2>/dev/null | grep -E 'state =|pid =|last exit code' || echo "$label: not loaded"
done
echo ""
pgrep -fl 'daemon_ssh_reverse_tunnel|daemon_mariago_external_probe|daemon_mariago_web_watchdog|vlm_server serve|ssh -N.*ethtrade' || true
echo ""
echo "launchd 로그: ~/Library/Logs/MariGO/"
echo "상태: logs/mariago_ssh_tunnel/HEARTBEAT.md"
echo " logs/mariago_external_probe/HEARTBEAT.md"
echo " logs/mariago_web_watch/HEARTBEAT.md"