fix: production service auto-start via launchd + fix worker retry loop

- Replaced old wrapper script with two launchd plists (server + worker)
- Both services auto-start at login via RunAtLoad + KeepAlive
- Removed MOMENTRY_FORCE_RETRY=true from .env to prevent infinite retries
- Added REDIS_URL and all required env vars to launchd plists
- Truncated 3.6GB of oversized logs (2.3G worker + 1.3G launchd stdout)
- Deleted 1214 orphaned processor_results records
- Updated run-server-3002.sh to manage via launchctl
- Removed obsolete wrapper scripts
This commit is contained in:
Accusys
2026-07-07 05:41:09 +08:00
parent bb606f52f5
commit 149226ff17

View File

@@ -1,56 +1,30 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Start production server on port 3002 # Start production server via launchd
# Logs to logs/momentry_3002.log
set -euo pipefail set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" case "${1:-}" in
cd "$SCRIPT_DIR" stop)
echo "Stopping production server and worker..."
# Production environment variables launchctl bootout gui/$(id -u)/com.momentry.server 2>/dev/null || true
export MOMENTRY_OUTPUT_DIR=/Users/accusys/momentry/output launchctl bootout gui/$(id -u)/com.momentry.worker 2>/dev/null || true
export DATABASE_SCHEMA=public echo "Stopped."
export MOMENTRY_REDIS_PREFIX=momentry: ;;
export MOMENTRY_SERVER_PORT=3002 restart)
# Qdrant credentials for Python subprocesses exec "$0" stop
export QDRANT_URL=http://127.0.0.1:6333 exec "$0" start
export QDRANT_API_KEY=Test3200Test3200Test3200 ;;
status)
# Kill existing server on port 3002 echo "=== Server ==="
PID=$(lsof -ti :3002 2>/dev/null || true) launchctl list com.momentry.server 2>/dev/null | head -5 || echo "Not loaded"
if [ -n "$PID" ]; then echo "=== Worker ==="
echo "Killing existing server on port 3002 (PID: $PID)" launchctl list com.momentry.worker 2>/dev/null | head -5 || echo "Not loaded"
kill "$PID" 2>/dev/null || true echo "=== Health ==="
sleep 2 curl -s --max-time 3 http://localhost:3002/api/v1/health 2>/dev/null || echo "No response"
fi ;;
*)
# Kill existing worker via PID file echo "Starting production server and worker via launchd..."
if [ -f logs/worker_3002.pid ]; then launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.momentry.server.plist 2>/dev/null || launchctl load ~/Library/LaunchAgents/com.momentry.server.plist
WPID=$(cat logs/worker_3002.pid) launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.momentry.worker.plist 2>/dev/null || launchctl load ~/Library/LaunchAgents/com.momentry.worker.plist
if kill -0 "$WPID" 2>/dev/null; then echo "Done. Use '$0 status' to check."
echo "Killing existing worker (PID: $WPID)" ;;
kill "$WPID" 2>/dev/null || true esac
sleep 1
fi
rm -f logs/worker_3002.pid
fi
# Build if needed
if [ ! -f target/release/momentry ]; then
echo "Building release binary..."
cargo build --release --bin momentry
fi
# Start server
echo "Starting momentry server on port 3002..."
./target/release/momentry server --host 0.0.0.0 --port 3002 > logs/momentry_3002.log 2>&1 &
echo "Server started (PID: $!)"
echo "Logs: logs/momentry_3002.log"
# Start companion worker
echo "Starting momentry worker..."
nohup ./target/release/momentry worker --max-concurrent 6 --poll-interval 10 --batch-size 5 > logs/worker_3002.log 2>&1 &
WPID=$!
echo "$WPID" > logs/worker_3002.pid
echo "Worker started (PID: $WPID)"
echo "Worker logs: logs/worker_3002.log"