# Service Health Check (no_agent watchdog) A reusable pattern for no_agent cron jobs that monitor ALL critical services and only report on failure. ## Design ```bash #!/bin/bash # silent on success, report failures only CHECKS=() FAILED=0 # Each check: command || { CHECKS+=("Service Name"); FAILED=1; } if [ $FAILED -eq 1 ]; then echo "⚠️ Service Health Alert — $(date)" for c in "${CHECKS[@]}"; do echo " ❌ $c"; done exit 1 fi exit 0 ``` ## What to check - Systemd services (caddy, mysql-tunnel) - Docker containers (docker ps --format) - Local HTTP endpoints (curl -sf) - Remote reachability (ping through tunnel, SSH) - Database connectivity (mysql -e "SELECT 1") - API token validity (curl + verify response) ## Pitfalls - **Must be no_agent: true** in cron config — LLM processing is wasted on binary health checks and causes typing indicators - **Include the exit code** — exit 0 = silent, exit 1 = output delivered. Without the right exit code, cron can't tell success from failure - **Test with `bash script.sh` and check `echo $?`** before deploying - **MySQL checks need `--skip-ssl`** for local tunnel connections - **Don't check too many things** — 10-12 checks is the sweet spot. More than 15 and the script gets brittle - **SSH checks need `-o BatchMode=yes -o ConnectTimeout=5`** to avoid hanging on unreachable hosts