Troubleshooting guide: Understanding Cron Expressions

How to use Cron Expressions?

  1. What is Cron ?

The software utility Cron is a time-based job scheduler in Unix-like computer operating systems. People who set up and maintain software environments use cron to schedule jobs (commands or shell scripts) to run periodically at fixed times, dates, or intervals. It typically automates system maintenance or administration—though its general-purpose nature makes it useful for things like downloading files from the Internet and downloading email at regular intervals.

  1. How is Cron used in UiPath?

From UiPath perspective, we use cron expressions to schedule complicated jobs from orchestrator.

A cron expression is a string comprised of 6 or 7 fields separated by white space. Fields can contain any of the allowed values, along with various combinations of the allowed special characters for that field. The fields are as follows:

Field Name

Mandatory

Allowed Values

Allowed Special Characters

Seconds

YES

0-59

, - * /

Minutes

YES

0-59

, - * /

Hours

YES

0-23

, - * /

Day of month

YES

Jan-31

, - * ? / L W

Month

YES

1-12 or JAN-DEC

, - * /

Day of week

YES

1-7 or SUN-SAT

, - * ? / L #

Year

NO

empty, 1970-2099

, - * /

So cron expressions can be as simple as: * * * * ? * or more complex, like: 0/5 14,18,3-39,52 * ? JAN,MAR,SEP MON-FRI 2002-2010

This can be divided into Seconds, minutes, hours, Day of the month, month and day of the week, year.

  1. Meaning of the special characters

Here is the list of what the special characters mean.

  • “*” Indicates all values. Eg. for month field, it means every month
  • “?” ( “no specific value”) - useful when you need to specify something in one of the two fields in which the character is allowed, but not the other. For example, if I want my trigger to fire on a particular day of the month (say, the 10th), but don’t care what day of the week that happens to be, I would put “10” in the day-of-month field, and “?” in the day-of-week field. See the examples below for clarification.
  • “- ” used to specify ranges. For example, “10-12” in the hour field means “the hours 10, 11 and 12”.
  • “,”  used to specify additional values. For example, “MON,WED,FRI” in the day-of-week field means “the days Monday, Wednesday, and Friday”.
  • “/”  used to specify increments. For example, “0/15” in the seconds field means “the seconds 0, 15, 30, and 45”. And “5/15” in the seconds field means “the seconds 5, 20, 35, and 50”. You can also specify ‘/’ after the ‘’ character - in this case ‘’ is equivalent to having ‘0’ before the ‘/’. ‘1/3’ in the day-of-month field means “fire every 3 days starting on the first day of the month”.
  • L (“last”) - has different meaning in each of the two fields in which it is allowed. For example, the value “L” in the day-of-month field means “the last day of the month” - day 31 for January, day 28 for February on non-leap years. If used in the day-of-week field by itself, it simply means “7” or “SAT”. But if used in the day-of-week field after another value, it means “the last xxx day of the month” - for example “6L” means “the last friday of the month”. You can also specify an offset from the last day of the month, such as “L-3” which would mean the third-to-last day of the calendar month. When using the ‘L’ option, it is important not to specify lists, or ranges of values, as you’ll get confusing/unexpected results.
  • W (“weekday”) - used to specify the weekday (Monday-Friday) nearest the given day. As an example, if you were to specify “15W” as the value for the day-of-month field, the meaning is: “the nearest weekday to the 15th of the month”. So if the 15th is a Saturday, the trigger will fire on Friday the 14th. If the 15th is a Sunday, the trigger will fire on Monday the 16th. If the 15th is a Tuesday, then it will fire on Tuesday the 15th. However if you specify “1W” as the value for day-of-month, and the 1st is a Saturday, the trigger will fire on Monday the 3rd, as it will not ‘jump’ over the boundary of a month’s days. The ‘W’ character can only be specified when the day-of-month is a single day, not a range or list of days.

 

  1. Cron examples to schedule jobs:

Expression

Meaning

* * * ? * *

Every second

0 * * ? * *

Every minute

0 */2 * ? * *

Every even minute

0 1/2 * ? * *

Every uneven minute

0 */2 * ? * *

Every 2 minutes

0 */3 * ? * *

Every 3 minutes

0 */4 * ? * *

Every 4 minutes

0 */5 * ? * *

Every 5 minutes

0 */10 * ? * *

Every 10 minutes

0 */15 * ? * *

Every 15 minutes

0 */30 * ? * *

Every 30 minutes

0 15,30,45 * ? * *

Every hour at minutes 15, 30 and 45

0 0 * ? * *

Every hour

0 0 */2 ? * *

Every hour

0 0 0/2 ? * *

Every even hour

0 0 1/2 ? * *

Every uneven hour

0 0 */3 ? * *

Every three hours

0 0 */4 ? * *

Every four hours

0 0 */6 ? * *

Every six hours

0 0 */8 ? * *

Every eight hours

0 0 */12 ? * *

Every twelve hours

0 0 0 * * ?

Every day at midnight - 12am

0 0 1 * * ?

Every day at 1am

0 0 6 * * ?

Every day at 6am

0 0 12 * * ?

Every day at noon - 12pm

0 0 12 * * ?

Every day at noon - 12pm

0 0 12 * * SUN

Every Sunday at noon

0 0 12 * * MON

Every Monday at noon

0 0 12 * * TUE

Every Tuesday at noon

0 0 12 * * WED

Every Wednesday at noon

0 0 12 * * THU

Every Thursday at noon

0 0 12 * * FRI

Every Friday at noon

0 0 12 * * SAT

Every Saturday at noon

0 0 12 * * MON-FRI

Every Weekday at noon

0 0 12 * * SUN,SAT

Every Saturday and Sunday at noon

0 0 12 */7 * ?

Every 7 days at noon

0 0 12 1 * ?

Every month on the 1st, at noon

0 0 12 2 * ?

Every month on the 2nd, at noon

0 0 12 15 * ?

Every month on the 15th, at noon

0 0 12 1/2 * ?

Every 2 months on the 1st, at noon

0 0 12 1/4 * ?

Every 4 months on the 1st, at noon

0 0 12 L * ?

Every month on the last day of the month, at noon

0 0 12 L-2 * ?

Every month on the second to last day of the month, at noon

0 0 12 LW * ?

Every month on the last weekday, at noon

0 0 12 1L * ?

Every month on the last Sunday, at noon

0 0 12 2L * ?

Every month on the last Monday, at noon

0 0 12 6L * ?

Every month on the last Friday, at noon

0 0 12 1W * ?

Every month on the nearest Weekday to the 1st of the month, at noon

0 0 12 15W * ?

Every month on the nearest Weekday to the 15th of the month, at noon

0 0 12 ? * 2#1

Every month on the first Monday of the Month, at noon

0 0 12 ? * 6#1

Every month on the first Friday of the Month, at noon

0 0 12 ? * 2#2

Every month on the second Monday of the Month, at noon

0 0 12 ? * 5#3

Every month on the third Thursday of the Month, at noon - 12pm

0 0 12 ? JAN *

Every day at noon in January only

0 0 12 ? JUN *

Every day at noon in June only

0 0 12 ? JAN,JUN *

Every day at noon in January and June

0 0 12 ? DEC *

Every day at noon in December only

0 0 12 ? JAN,FEB,MAR,APR *

Every day at noon in January, February, March and April

0 0 12 ? 9-12 *

Every day at noon between September and December

 

Scenario 1 : Job need to run from a particular days of a month its possible (example : need to start a job at 10:00 AM, between day 3 and 15 of the month)

            Expression : 0 0 10 3-15 * ? *

 

Scenario 2 : Job need to run on weekdays only at 10A.M

            Expression : 0 0 10 ? * MON-FRI *

 

Scenario 3: combines both specific days of a month and on weekdays only. When try to give the combined expression of above in Orchestrator we get cron expression in-valid.

Such scenario, the specific days of a month can be handled in cron expression and the weekday only logic need to be include in bot design.