Skip to content

Schedulers overview

Schedulers are the third adapter axis. Each engine has one or more schedulers it pairs well with.

SchedulerPackageReadWrite (v1.0)Pairs with
celery-beatz4j-celerybeat✓ (requires django-celery-beat)Celery
rq-schedulerz4j-rqschedulerread-only in v1.0RQ
APSchedulerz4j-apschedulerDramatiq / standalone
huey-periodicz4j-hueyperiodicread-only (decorators)Huey
arq-cronz4j-arqcronread-only (decorators)arq
taskiq-schedulerz4j-taskiq-schedulertaskiq
  • Read-only - z4j can show the schedule in the dashboard but cannot create/pause/delete entries. This applies where the scheduler stores schedules in decorator form (code), not state.
  • Write - z4j can create / update / pause / resume / delete schedule entries via the dashboard UI and REST API.

Schedules are discovered on agent boot via the scheduler-specific API and re-synced every 5 minutes. Changes made outside the dashboard (e.g., directly editing the Postgres django_celery_beat_* tables) are picked up on the next sync.

When supported, the UI exposes:

  • Create - name, task, cron or interval, args/kwargs, enabled/disabled.
  • Update - any of the above.
  • Pause / Resume - toggle enabled.
  • Delete - remove the entry.

Every CRUD op writes an audit log entry.

  • Clock drift - if your brain and agent live in different timezones, use UTC crontabs. The dashboard renders in the viewer’s local time.
  • Duplicate schedules - one project can have duplicate names across agents (useful for active/standby). The dashboard shows all.
  • Paused-at-broker vs paused-at-scheduler - some engines have both; z4j operates at the scheduler level. If you pause at the broker, the dashboard still shows “enabled” on the schedule.