Cron expression generator: from "every weekday at 9" to a cron line
Is it 0 9 * * 1-5 or 9 0 * * 1-5? Cron's five fields are easy to mix up, and a wrong one runs your job at 3 a.m. or never. Describe the schedule in plain words and your todo.is agent writes the expression for your system, explains each field and lists the next run times so you can check it before it goes live.
The prompt
- Write a cron expression for this schedule: [SCHEDULE IN PLAIN WORDS]. It will run in [WHERE IT RUNS] in the [TIME ZONE] time zone. Explain each field, list the next 10 run times, and warn me about daylight saving time or month-end surprises. If the schedule can't be done in one expression, give me the simplest working setup. Also give me the full line to run [COMMAND OR JOB].
What to change
- [SCHEDULE IN PLAIN WORDS]: E.g. "every weekday at 9:30", "every 15 minutes during office hours", "the last day of each month at 23:00".
- [WHERE IT RUNS]: E.g. "Linux crontab", "GitHub Actions", "Kubernetes CronJob", "AWS EventBridge", "Quartz (Java)", "Vercel cron".
- [TIME ZONE]: E.g. "Europe/London", "America/New_York", "UTC".
- [COMMAND OR JOB]: E.g. "/home/ana/backup.sh", "python3 /opt/report.py". Or "no command, just the expression".
Example result
- Schedule: every 15 minutes, 8:00 to 17:45, Monday to Friday (Linux crontab, Europe/London)
- Expression: */15 8-17 * * 1-5
- Full crontab line:
- */15 8-17 * * 1-5 /usr/bin/python3 /opt/report.py >> /var/log/report.log 2>&1
- Field by field
- • Minute */15: at 0, 15, 30 and 45
- • Hour 8-17: from 8 a.m. through the 17:00 hour, so the last run is 17:45
- • Day of month (asterisk): any day
- • Month (asterisk): any month
- • Day of week 1-5: Monday (1) to Friday (5); Sunday is 0 or 7
- Next 10 runs (from Thursday 8 October 2026, 16:20)
- • Thu 8 Oct 16:30, 16:45, 17:00, 17:15, 17:30, 17:45
- • Fri 9 Oct 08:00, 08:15, 08:30, 08:45
- Watch out for
- • Server time zone: crontab uses the server's clock. Check with timedatectl; if it says UTC, your 8:00 runs at 9:00 London time in summer. Add CRON_TZ=Europe/London at the top of the crontab if your cron supports it
- • Daylight saving: on 25 October 2026 clocks go back. Runs between 1:00 and 2:00 could happen twice, but this schedule starts at 8:00, so it's safe
- • Ending at exactly 17:00: if you want the last run at 17:00, not 17:45, use two lines: */15 8-16 * * 1-5 and 0 17 * * 1-5
- Same schedule elsewhere
- • GitHub Actions (always UTC): cron: "*/15 7-16 * * 1-5" in summer, shift by an hour in winter
- • Quartz / Spring (6 fields, seconds first): 0 */15 8-17 ? * MON-FRI
- • AWS EventBridge: cron(0/15 8-17 ? * MON-FRI *)
How to do it with todo.is
- Copy the prompt and describe your schedule as you'd say it out loud.
- Add where it runs and your time zone; these change the answer.
- Send it in todo.is or message your agent on WhatsApp, Telegram or Slack.
- Check the list of next run times, then paste the line into crontab -e or your scheduler's config.
- If you don't have a server, ask your agent to run the job itself as a recurring to-do instead.
Tips for a better result
- Always say which system. Standard cron has 5 fields; Quartz and Spring add seconds; AWS EventBridge has 6 with a year.
- When a day of month and a day of week are both set in standard cron, the job runs when either matches, not both.
- For "last day of the month", standard cron has no L. Run daily on 28-31 and check in the script whether tomorrow is the 1st.
- Log the output (>> file.log 2>&1). Silent cron failures are the most common surprise.
- Many tasks don't need a server at all: a todo.is recurring to-do can check, report or remind on the same schedule and message you.
cron expression generator: FAQ
- What do the five fields in a cron expression mean? In order: minute (0-59), hour (0-23), day of month (1-31), month (1-12) and day of week (0-6, Sunday is 0). * means every value, */n means every n, and a-b is a range.
- How do I run a cron job every 5 minutes? Use */5 * * * *. It runs at minutes 0, 5, 10 and so on of every hour.
- What time zone does cron use? Classic cron uses the server's local time zone. Many cloud schedulers, including GitHub Actions, use UTC, so convert your local time first.
- Can todo.is run my scheduled job for me? It can run its own recurring to-dos, like checking a page, building a report or sending a reminder at set times. It doesn't run cron jobs on your server.
JavaScript is required to use the todo.is app.