celery-beat
Package: z4j-celerybeat - Celery 5+, django-celery-beat 2.5+ (for writable backend).
Install
Section titled “Install”pip install z4j-celerybeatBackends
Section titled “Backends”| Backend | Readable | Writable |
|---|---|---|
celery.beat.PersistentScheduler (filesystem) | ✓ | ✗ (read-only) |
django_celery_beat.schedulers.DatabaseScheduler | ✓ | ✓ |
| Custom | ✓ if it exposes the standard Scheduler API | depends |
Writable operations
Section titled “Writable operations”When paired with django-celery-beat:
- Create: inserts into
django_celery_beat_periodictask+ appropriate*Scheduletable. - Update: modifies the row.
- Pause/Resume: flips
enabled. - Delete: removes the row.
Schedule types supported
Section titled “Schedule types supported”IntervalSchedule(every N seconds/minutes/…)CrontabSchedule(minute, hour, day, month, day-of-week)SolarSchedule(sunrise/sunset) - read-only in v1.0ClockedSchedule(one-shot) - read-only in v1.0
Filesystem scheduler
Section titled “Filesystem scheduler”If you’re using the default PersistentScheduler, the dashboard shows schedules as read-only. Switch to DatabaseScheduler to edit from the UI.
Multiple beat processes
Section titled “Multiple beat processes”Running multiple beat schedulers against the same backend causes duplicate task firings. z4j detects this via the *-beat record and shows a warning in the schedules page. Run exactly one beat.
Caveats
Section titled “Caveats”- The agent writes to the DB directly (bypassing
PeriodicTask.save_related-style cascades). Django signals still fire. No Django-specific validators run. PeriodicTasks.update_changed()is called after each CRUD op so beat picks up changes within one tick.