|
7 | 7 | # Pass the live session UUIDs (from list_sessions) as arguments. |
8 | 8 | # Any .sock file whose UUID is NOT in the live set gets removed. |
9 | 9 | # Stale .alias symlinks pointing to removed sockets also get cleaned. |
10 | | -# Then restarts the slack-bridge tmux session with the current control-agent UUID. |
| 10 | +# Then restarts the slack-bridge process with the current control-agent UUID. |
11 | 11 |
|
12 | 12 | set -euo pipefail |
13 | 13 |
|
|
66 | 66 | exit 1 |
67 | 67 | fi |
68 | 68 |
|
69 | | -# Kill existing slack-bridge tmux session if running |
70 | | -if tmux has-session -t slack-bridge 2>/dev/null; then |
71 | | - echo "Killing existing slack-bridge session..." |
72 | | - tmux kill-session -t slack-bridge |
| 69 | +BRIDGE_PID_FILE="$HOME/.pi/agent/slack-bridge.pid" |
| 70 | +BRIDGE_LOG_DIR="$HOME/.pi/agent/logs" |
| 71 | +BRIDGE_LOG_FILE="$BRIDGE_LOG_DIR/slack-bridge.log" |
| 72 | + |
| 73 | +kill_bridge_supervisor() { |
| 74 | + local bridge_pid="$1" |
| 75 | + [ -n "$bridge_pid" ] || return 0 |
| 76 | + if ! kill -0 "$bridge_pid" 2>/dev/null; then |
| 77 | + return 0 |
| 78 | + fi |
| 79 | + |
| 80 | + # Best-effort: terminate direct children first so no stale bridge process keeps the port. |
| 81 | + local bridge_child_pids |
| 82 | + bridge_child_pids="$(pgrep -P "$bridge_pid" 2>/dev/null || true)" |
| 83 | + if [ -n "$bridge_child_pids" ]; then |
| 84 | + kill $bridge_child_pids 2>/dev/null || true |
| 85 | + sleep 1 |
| 86 | + kill -9 $bridge_child_pids 2>/dev/null || true |
| 87 | + fi |
| 88 | + |
| 89 | + kill "$bridge_pid" 2>/dev/null || true |
73 | 90 | sleep 1 |
| 91 | + kill -9 "$bridge_pid" 2>/dev/null || true |
| 92 | +} |
| 93 | + |
| 94 | +# Kill existing slack-bridge process if running |
| 95 | +if [ -f "$BRIDGE_PID_FILE" ]; then |
| 96 | + BRIDGE_PID="$(cat "$BRIDGE_PID_FILE" 2>/dev/null || true)" |
| 97 | + if [ -n "$BRIDGE_PID" ] && kill -0 "$BRIDGE_PID" 2>/dev/null; then |
| 98 | + echo "Killing existing slack-bridge process (pid=$BRIDGE_PID)..." |
| 99 | + kill_bridge_supervisor "$BRIDGE_PID" |
| 100 | + fi |
| 101 | + rm -f "$BRIDGE_PID_FILE" |
74 | 102 | fi |
75 | 103 |
|
76 | 104 | # Select bridge script: prefer broker pull mode when SLACK_BROKER_* vars are present, |
@@ -100,9 +128,25 @@ if [ -z "$BRIDGE_SCRIPT" ]; then |
100 | 128 | fi |
101 | 129 |
|
102 | 130 | # Start fresh slack-bridge |
| 131 | +# Keep a supervisor loop (matching start.sh) so bridge restarts automatically on crash. |
103 | 132 | echo "Starting slack-bridge ($BRIDGE_SCRIPT) with PI_SESSION_ID=$MY_UUID..." |
104 | | -tmux new-session -d -s slack-bridge \ |
105 | | - "unset PKG_EXECPATH; export PATH=\$HOME/.varlock/bin:\$HOME/opt/node-v22.14.0-linux-x64/bin:\$PATH && export PI_SESSION_ID=$MY_UUID && cd /opt/baudbot/current/slack-bridge && exec varlock run --path ~/.config/ -- node $BRIDGE_SCRIPT" |
| 133 | +mkdir -p "$BRIDGE_LOG_DIR" |
| 134 | +( |
| 135 | + unset PKG_EXECPATH |
| 136 | + export PATH="$HOME/.varlock/bin:$HOME/opt/node-v22.14.0-linux-x64/bin:$PATH" |
| 137 | + export PI_SESSION_ID="$MY_UUID" |
| 138 | + cd /opt/baudbot/current/slack-bridge |
| 139 | + while true; do |
| 140 | + varlock run --path ~/.config/ -- node "$BRIDGE_SCRIPT" >>"$BRIDGE_LOG_FILE" 2>&1 |
| 141 | + echo "[$(date -Is)] ⚠️ Bridge exited ($?), restarting in 5s..." >>"$BRIDGE_LOG_FILE" |
| 142 | + sleep 5 |
| 143 | + done |
| 144 | +) & |
| 145 | +NEW_BRIDGE_PID=$! |
| 146 | +echo "$NEW_BRIDGE_PID" > "$BRIDGE_PID_FILE" |
| 147 | +chmod 600 "$BRIDGE_PID_FILE" |
| 148 | +echo "Bridge pid: $NEW_BRIDGE_PID" |
| 149 | +echo "Bridge logs: $BRIDGE_LOG_FILE" |
106 | 150 |
|
107 | 151 | # Wait for bridge to come up |
108 | 152 | sleep 3 |
|
0 commit comments