# IRDB scheduler — busybox crond schedule. # # Drives /internal/jobs/tick once a minute. The api dispatches whichever # periodic jobs are due (recompute-scores, cleanup-audit, enrich-pending, # refresh-geoip). job_locks mediates between replicas so duplicate ticks # are correct but wasteful. # # -m 280 caps the request below the 1-minute cadence so we never queue # overlapping ticks. # # SEC_REVIEW F25: target localhost — the scheduler service uses # `network_mode: "service:api"` so it shares the api container's network # namespace and reaches FrankenPHP via loopback. The api's /internal/* # gate is now loopback-only on both Caddy and PHP layers; reaching it # from a sibling docker-bridge peer (the previous `http://api:8081` # routing) would 404. * * * * * curl -sf -m 280 -X POST -H "Authorization: Bearer $INTERNAL_JOB_TOKEN" http://localhost:8081/internal/jobs/tick > /dev/null