- Created scripts/gateway-start.sh: Startup wrapper that cleans stale lock files
before starting the gateway (prevents "already running" errors)
- Created scripts/pm2-health-monitor.js: Standalone health check process managed by PM2
* Monitors port 18789 connectivity every 5 minutes
* Detects unresponsive gateway (process running but port hung)
* Force-restarts via killall + PM2 auto-recovery
* Monitors inotify watcher usage (warns at 80% of limit)
* Logs to /tmp/moltbot/pm2-health-monitor.log
- Updated ecosystem.config.cjs to:
* Use gateway-start.sh wrapper for lock cleanup
* Add moltbot-health-monitor as separate PM2 app
* Health monitor runs alongside gateway (same PM2 daemon, isolated from other daemons)
Key Design Principles:
- PM2 handles process lifecycle (restart, memory limits, crash recovery)
- Health monitor adds responsiveness detection (what PM2 can't do alone)
- No systemd involvement (prevents port conflicts with other PM2 instances)
- Each PM2 daemon isolated: moltbot-gateway, si_project/dashboard, ai_product_visualizer
This ensures gateway remains stable even if it becomes unresponsive to Telegram messages.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>