INIT
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
trap "echo 'Server stopped by user'; exit 0" SIGINT
|
||||
|
||||
MAX_BACKOFF=60
|
||||
FAIL_COUNT=0
|
||||
PID_FILE="bun.pid"
|
||||
PORT=${PORT:-3000}
|
||||
ENTRYPOINT="backend/server.ts"
|
||||
|
||||
mkdir -p logs
|
||||
|
||||
while true; do
|
||||
# Check if previous server PID exists
|
||||
if [ -f "$PID_FILE" ]; then
|
||||
PREV_PID=$(cat "$PID_FILE")
|
||||
if ps -p $PREV_PID > /dev/null 2>&1; then
|
||||
echo "Previous server (PID $PREV_PID) still running. Waiting 2 seconds..."
|
||||
sleep 2
|
||||
continue
|
||||
else
|
||||
# Clean up stale PID file
|
||||
rm "$PID_FILE"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Starting Bun server on port $PORT..." | tee -a logs/server.log
|
||||
|
||||
# Start Bun in background and store PID
|
||||
bun run $ENTRYPOINT 2>&1 | tee -a logs/server.log &
|
||||
SERVER_PID=$!
|
||||
echo $SERVER_PID > "$PID_FILE"
|
||||
|
||||
# Wait for server to exit
|
||||
wait $SERVER_PID
|
||||
EXIT_CODE=$?
|
||||
|
||||
echo "Server exited with code $EXIT_CODE" | tee -a logs/server.log
|
||||
|
||||
# Remove PID file
|
||||
rm -f "$PID_FILE"
|
||||
|
||||
# Backoff logic
|
||||
FAIL_COUNT=$((FAIL_COUNT + 1))
|
||||
BACKOFF=$((2 ** FAIL_COUNT))
|
||||
[ $BACKOFF -gt $MAX_BACKOFF ] && BACKOFF=$MAX_BACKOFF
|
||||
JITTER=$((RANDOM % 4))
|
||||
SLEEP_TIME=$((BACKOFF + JITTER))
|
||||
|
||||
echo "Restarting in $SLEEP_TIME seconds (failures: $FAIL_COUNT)..." | tee -a logs/server.log
|
||||
sleep $SLEEP_TIME
|
||||
|
||||
if [ $FAIL_COUNT -ge 10 ]; then
|
||||
echo "High number of failures — cooling down for 5 minutes..." | tee -a logs/server.log
|
||||
sleep 300
|
||||
FAIL_COUNT=0
|
||||
fi
|
||||
|
||||
done
|
||||
Reference in New Issue
Block a user