crontool
Paste a schedule, read it in English, see the next runs.

Celery Beat crontab() Schedule

Celery Beat schedules periodic tasks using a crontab() object, not a raw cron string. You pass keyword fields — minute, hour, day_of_week, day_of_month, month_of_year — which map directly onto the cron fields.

crontab() keywords

Weekdays at 09:00 (cron 0 9 * * 1-5):

from celery.schedules import crontab
crontab(minute=0, hour=9, day_of_week='mon-fri')

Every 15 minutes: crontab(minute='*/15'). Every day at midnight: crontab(minute=0, hour=0) (the default for omitted fields is *).

Register it

In your Celery config: app.conf.beat_schedule = {'job': {'task': 'tasks.myjob', 'schedule': crontab(minute=0, hour=9, day_of_week='mon-fri')}}.

Intervals without cron

For simple fixed gaps use a number or timedelta instead: 'schedule': 30.0 (every 30 seconds) or timedelta(minutes=5).

Run the beat

Start the scheduler with celery -A proj beat (or worker -B for both in one process).

FAQ

Does Celery Beat take a cron string?

No — it uses a crontab() object with keyword fields (minute, hour, day_of_week, day_of_month, month_of_year) that map onto the cron fields.

What is the Celery crontab for weekdays at 9am?

crontab(minute=0, hour=9, day_of_week='mon-fri'), equivalent to the cron expression 0 9 * * 1-5.

How do I run a Celery task every 30 seconds?

Use a number or timedelta as the schedule instead of crontab: 'schedule': 30.0 or timedelta(seconds=30).