Jagan Sekaran
Jagan Sekaran

Reputation: 98

How to run cronjob on every month first friday?

I have cronjob to be run on every month first friday evening i used the below mentioned entry

00 20 1-7  * Fri         [ "$(date '+\%a')" = "Fri" ] && $HOME/path/to/my/script.sh > /dev/null 2>&1

This entry should run my script if Friday falls withing 1-7 day of the month, but my script is getting executed even after 7th (i.e on all Fridays of the month). Please suggest how to fix it.

Upvotes: 2

Views: 11532

Answers (1)

mc110
mc110

Reputation: 2833

This is because when you specify a day of month and day of week, cron will execute the job when EITHER of those constraints are true. From the man page for crontab (5):

   Note: The day of a command's execution can be specified by two fields —
   day  of  month,  and day of week.  If both fields are restricted (i.e.,
   aren't *), the command will be run when either field matches  the  cur‐
   rent time.  For example,
   ``30 4 1,15 * 5'' would cause a command to be run at 4:30 am on the 1st
   and 15th of each month, plus every Friday.

There isn't a direct way in cron to do what you want, but cron : how to schedule to run first Sunday of every month describes a workaround by using cron to run your script e.g. every Friday and then calculating in the script if the day of month is in the range 1-7, and only continuing when that is the case.

In response to the comment about using 5 rather than Fri to specify day of week: using Fri is OK, as the man page says:

   Months or days of the week can be specified by name.

Upvotes: 4

Related Questions