@aiyiran/myclaw 1.1.19 → 1.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,121 @@
1
+ #!/bin/bash
2
+ # myclaw-guard.sh - MyClaw Sync 守卫包装脚本
3
+ # 职责:探测环境、打印完整日志、持续守卫 mc server
4
+ # 用法: nohup bash myclaw-guard.sh >> ~/.openclaw/logs/myclaw-guard.log 2>&1 &
5
+
6
+ LOG_DIR="$HOME/.openclaw/logs"
7
+ LOG_FILE="$LOG_DIR/myclaw-guard.log"
8
+ mkdir -p "$LOG_DIR"
9
+
10
+ log() {
11
+ echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" >> "$LOG_FILE"
12
+ echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
13
+ }
14
+
15
+ log "========================================"
16
+ log "myclaw-guard 启动"
17
+ log "USER=$USER HOME=$HOME PID=$$"
18
+ log "原始 PATH=$PATH"
19
+
20
+ # ── 加载 shell 环境(探测 nvm / fnm / volta 等) ──────────────────────────
21
+ for rc in \
22
+ "$HOME/.profile" \
23
+ "$HOME/.bash_profile" \
24
+ "$HOME/.bashrc" \
25
+ "$HOME/.zshrc" \
26
+ "$HOME/.nvm/nvm.sh" \
27
+ "$HOME/.config/nvm/nvm.sh" \
28
+ "/usr/local/share/nvm/nvm.sh" \
29
+ "$HOME/.volta/bin/../load.sh" \
30
+ "$HOME/.fnm/fnm.env"; do
31
+ if [ -f "$rc" ]; then
32
+ log "加载 rc: $rc"
33
+ # shellcheck disable=SC1090
34
+ source "$rc" 2>/dev/null || true
35
+ fi
36
+ done
37
+
38
+ # 手动追加常见 bin 路径(覆盖 nvm/npm global 等)
39
+ for extra_path in \
40
+ "$HOME/.nvm/versions/node/$(ls $HOME/.nvm/versions/node 2>/dev/null | sort -V | tail -1)/bin" \
41
+ "$HOME/.volta/bin" \
42
+ "$HOME/.fnm/aliases/default/bin" \
43
+ "$HOME/.local/bin" \
44
+ "$HOME/.npm-global/bin" \
45
+ "/usr/local/bin" \
46
+ "/usr/bin"; do
47
+ if [ -d "$extra_path" ]; then
48
+ export PATH="$extra_path:$PATH"
49
+ fi
50
+ done
51
+
52
+ log "探测后 PATH=$PATH"
53
+
54
+ # ── 探测 node ─────────────────────────────────────────────────────────────
55
+ NODE_BIN=$(command -v node 2>/dev/null || echo "")
56
+ if [ -n "$NODE_BIN" ]; then
57
+ NODE_VER=$("$NODE_BIN" --version 2>/dev/null || echo "unknown")
58
+ log "node: $NODE_BIN ($NODE_VER)"
59
+ else
60
+ log "警告: 未找到 node"
61
+ fi
62
+
63
+ # ── 探测 mc ───────────────────────────────────────────────────────────────
64
+ MC_BIN=$(command -v mc 2>/dev/null || echo "")
65
+
66
+ if [ -z "$MC_BIN" ]; then
67
+ log "which mc 未找到,尝试常见路径..."
68
+ for candidate in \
69
+ "/usr/local/bin/mc" \
70
+ "/usr/bin/mc" \
71
+ "$HOME/.npm-global/bin/mc" \
72
+ "$HOME/.local/bin/mc" \
73
+ "$HOME/.nvm/versions/node/$(ls $HOME/.nvm/versions/node 2>/dev/null | sort -V | tail -1)/bin/mc" \
74
+ "$HOME/.volta/bin/mc" \
75
+ "$HOME/.fnm/aliases/default/bin/mc"; do
76
+ if [ -x "$candidate" ]; then
77
+ MC_BIN="$candidate"
78
+ log "找到 mc: $MC_BIN"
79
+ break
80
+ fi
81
+ done
82
+ fi
83
+
84
+ if [ -z "$MC_BIN" ]; then
85
+ log "错误: 无法找到 mc 命令,10秒后重试..."
86
+ sleep 10
87
+ exit 1
88
+ fi
89
+
90
+ log "mc: $MC_BIN"
91
+
92
+ # ── 读取 config.json,打印当前 claw 名 ──────────────────────────────────
93
+ CONFIG_FILE="$HOME/.openclaw/myclaw/server/config.json"
94
+ if [ -f "$CONFIG_FILE" ]; then
95
+ CLAW_NAME=$(python3 -c "import json,sys; print(json.load(open('$CONFIG_FILE')).get('claw','?'))" 2>/dev/null || cat "$CONFIG_FILE")
96
+ log "config.json: $CONFIG_FILE"
97
+ log "claw name: $CLAW_NAME"
98
+ else
99
+ log "错误: config.json 不存在 ($CONFIG_FILE)"
100
+ log "请先手动运行一次 mc server <name> 完成注册"
101
+ exit 1
102
+ fi
103
+
104
+ # ── PID 文件路径 ─────────────────────────────────────────────────────────
105
+ PID_FILE="$HOME/.openclaw/.myclaw-sync.pid"
106
+ log "pid file: $PID_FILE"
107
+ log "========================================"
108
+ log ""
109
+
110
+ # ── 持续守卫循环 ──────────────────────────────────────────────────────────
111
+ RESTART_COUNT=0
112
+ while true; do
113
+ RESTART_COUNT=$((RESTART_COUNT + 1))
114
+ log "[ 第 $RESTART_COUNT 次启动 ] $MC_BIN server"
115
+
116
+ "$MC_BIN" server
117
+ EXIT_CODE=$?
118
+
119
+ log "mc server 退出,退出码=$EXIT_CODE,3秒后重启..."
120
+ sleep 3
121
+ done
@@ -0,0 +1,18 @@
1
+ [Unit]
2
+ Description=MyClaw Sync Workspace Guard
3
+ Documentation=https://github.com/openclaw/myclaw
4
+ After=network-online.target
5
+ Wants=network-online.target
6
+
7
+ [Service]
8
+ Type=simple
9
+ ExecStart=%h/.openclaw/myclaw/server/myclaw-guard.sh
10
+ Restart=always
11
+ RestartSec=5
12
+
13
+ # 日志追加到文件(与 guard 脚本内的日志合并在一起)
14
+ StandardOutput=append:%h/.openclaw/logs/myclaw-guard.log
15
+ StandardError=append:%h/.openclaw/logs/myclaw-guard.log
16
+
17
+ [Install]
18
+ WantedBy=default.target