blob: 397b25b113fbda086d7b1ad7fb7bf46f8262105e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
#!/bin/bash
# Claude Bridge Worker - Cron Runner
# 由 setup.sh 生成实际路径,这里用占位符
# 功能: 1) 健康检查+自动重启 2) 任务通知 3) 命令执行
export PATH="$HOME/miniconda3/bin:$HOME/.local/bin:/usr/bin:/bin:$PATH"
BRIDGE_DIR="${CLAUDE_BRIDGE_DIR:-$HOME/claude-bridge}"
cd "$BRIDGE_DIR" || exit 1
source .env 2>/dev/null
export BROKER_URL API_SECRET
AUTH="Authorization: Bearer $API_SECRET"
SESSIONS_FILE="$BRIDGE_DIR/.sessions" # 每行: session_name project_dir
# === 健康检查 + 自动重启 ===
if [ -f "$SESSIONS_FILE" ]; then
while IFS=$'\t' read -r SESSION_NAME PROJECT_DIR; do
[ -z "$SESSION_NAME" ] && continue
if ! tmux has-session -t "$SESSION_NAME" 2>/dev/null; then
echo "$(date): Session $SESSION_NAME 不存在,重新创建..."
# 重建 tmux session
tmux new-session -d -s "$SESSION_NAME"
if [ -n "$PROJECT_DIR" ] && [ -d "$PROJECT_DIR" ]; then
tmux send-keys -t "$SESSION_NAME" "cd $PROJECT_DIR" Enter
sleep 1
fi
tmux send-keys -t "$SESSION_NAME" "claude --continue" Enter
# 通知 manager
curl -sf -X POST \
-H "$AUTH" \
-H "Content-Type: application/json" \
-d "{\"source\": \"system\", \"message\": \"Worker $SESSION_NAME ($(hostname)) 被系统杀掉后已自动重启,工作目录: ${PROJECT_DIR:-$HOME}\"}" \
"$BROKER_URL/log" 2>/dev/null || true
echo "$(date): Session $SESSION_NAME 已重启并通知 manager"
fi
done < "$SESSIONS_FILE"
fi
# === 任务通知 + 命令执行 (每15秒一轮,共4轮) ===
for i in 0 1 2 3; do
bash "$BRIDGE_DIR/poll_and_notify.sh" >> /tmp/claude-bridge.log 2>&1
bash "$BRIDGE_DIR/execute_commands.sh" >> /tmp/claude-bridge-cmd.log 2>&1
[ $i -lt 3 ] && sleep 15
done
|