Execute cron on a specific day of the month (e.g. second monday)

How to execute a cron on a specific day of the week once in the month?

This could look simple as we could think that this line in cron would do the trick:

# Run on every second Tuesday of the month
15 3 8-14 * 2  /usr/bin/bash /opt/myscriptfortuesday.sh

But this would not work as the ‘2’ for checking the Tuesday will come as a OR condition, and the command would be executed from day 8 to day 14 and on every Tuesday of the month.

As a workaround for that, you can use that command:

# Run on every second Tuesday of the month
15 3 8-14 * * test $(date +%u) -eq 2 && /usr/bin/bash /opt/myscriptfortuesday.sh

Here is the explanation of this cron line:

15   = 15th minute
3    = 3am
8-14 = between day 8 and day 14 (second week)
*    = every month
*    = every day of the week
test $(date +%u) -eq 2 && /usr/bin/bash /opt/myscriptfortuesday.sh = the command to execute with a check on the date

Doing this check will allow to verify first that we are on the second tuesday before to execute the command. Don’t forget to add a backslash before the ‘%’ character to escape it.