Skip to main content

CRON Expressions in Atria

Overview

CRON Expressions are a simple means of expressing a schedule for when a batch process or job should be executed. CRON Expressions are not unique to Atria—they originated in the mid-1970s and have survived the test of time. Interestingly, the name CRON comes from the Greek God Chronos (the god of time!).

In Atria, we use CRON expressions as a simple and flexible means of specifying your chosen schedule for batch processes. These can be defined and executed within Atria (version 15 onwards) through the Atria Jobs System.

The Atria implementation is based on the HangFireIO Cronos implementation—more details are available here: Cronos on GitHub.

Components of a CRON Expression

CRON expressions have 6 simple elements combined into a single string.

Each element is separated by whitespace and defines a component of time—these are used to determine the times a job should run.

ElementSecondMinuteHourDay-of-monthMonthDay-of-week
RequiredYesYesYesYesYesYes
Permitted Values0-590-590-231-311-12 (JAN-DEC)0-6 (Sunday is 0)
Special Values*, -, /, ?*, -, /, ?*, -, /, ?*, -, /, LW*, -, /, ?*, -, /, ?

Examples

The following examples cover a variety of common schedules. If you have more specific requirements, you can craft a custom expression that fits your needs.

ExpressionMeaning
0 0 11 ? * *Run at 11:00 AM every day
0 30 9 ? * *Run at 09:30 AM every day
0 0/1 13 ? * *Run every minute starting at 1:00 PM and ending at 1:59 PM, every day
0 0/10 * ? * *Run every 10 minutes all day every day
0 0/15 09,17 * * *Run every 15 minutes starting at 9:00 AM and ending at 9:45 AM, AND
every 15 minutes starting at 5:00 PM and ending at 5:55 PM, every day
0 0 21 L * ?Run on the last day of every month at 09:00 PM
0 0 21 31 12 ?Run at 09:00 PM on the 31st of December, every year
0 15 10 ? * MON,TUE,WEDRun at 10:15 AM every Monday, Tuesday, and Wednesday
0 0 21 05 11 ?Run on November 5th at 9:00 PM

Simplifications via Macro

The Atria Job System also supports "Macros," which provide shortcuts for common schedules. Each macro starts with an @ symbol and represents a simple schedule like every day or every minute.

MacroEquivalentComment
@every_second* * * * * *Run once a second
@every_minute* * * * *Run once a minute at the beginning of the minute
@hourly0 * * * *Run once an hour at the beginning of the hour
@daily0 0 * * *Run once a day at midnight
@midnight0 0 * * *Run once a day at midnight
@weekly0 0 * * 0Run once a week at midnight on Sunday morning
@monthly0 0 1 * *Run once a month at midnight on the first day of the month
@yearly0 0 1 1 *Run once a year at midnight on January 1st
@annually0 0 1 1 *Same as @yearly

Special Characters and Their Purpose

Here’s an explanation of special characters used in CRON expressions:

  • “L” – In the day-of-month field, selects the last day of the month.
  • “W” – Specifies the nearest weekday to the given day. For example, 15W would be the nearest weekday to the 15th. This can only specify a single day.
  • “-” – Used to specify a range (e.g., 8-12 for days or Mon-Thu for weekdays).
  • “,” – Used to specify additional values (e.g., Mon,Thu,Sat for days or 8,11,15 for times).
  • “?” – Used when a value is not required. For example, if you specify a job to run on the 15th day of the month, the day of the week is not required, so use ? in the day-of-week field.
  • “/” – Used to specify increments. For example, 0/5 in the minute field means the job will run at 5, 10, 15, 20, etc.
  • “*” – Selects all values in a field. For example, * in the minute field means every minute, and * in the hour field means every hour.

All credit to Sergey Odinokov for the implementation of Cronos, licensed under MIT License terms.