Monthly
0 17 * * 5Run on the last Friday of every month at 17:00 (with a guard).
This preview is live: the table below shows the actual next run times for 0 17 * * 5 in your time zone, recomputed in your browser. Change the expression, dialect, or zone to experiment, then copy the result.
0 17 * * 5 meansLike the last day of the month, the "last Friday" has no native Unix operator. The portable trick is to fire every Friday (0 17 * * 5) and add a guard in the job that checks whether another Friday remains this month — i.e. whether today + 7 days rolls into the next month. Only the final Friday passes the check.
Last-Friday scheduling is a fixture of team rhythms: the monthly demo, the sprint retro, the all-hands. It is deliberately tied to a weekday rather than a date so it always lands on a working day people can attend.
Unix cron has five fields. Here is what each one is doing in this expression:
| Field | Value | Meaning |
|---|---|---|
| Minute | 0 | minute = 0 |
| Hour | 17 | hour = 17 |
| Day of month | * | every day-of-month |
| Month | * | every month |
| Day of week | 5 | day-of-week = 5 |
The same cadence written for the seven cron dialects you are most likely to meet. Copy the line for the system you target — the field count and day-of-week numbering differ between them.
| Scheduler | Expression | Copy |
|---|---|---|
| Unix / crontab | 0 17 * * 5 | |
| GitHub Actions | 0 17 * * 5 | |
| Kubernetes CronJob | 0 17 * * 5 | |
| Vercel Cron | 0 17 * * 5 | |
| Quartz | 0 0 17 ? * 5 * | |
| Spring | 0 0 17 ? * 5 | |
| AWS EventBridge | 0 17 ? * 5 * |
Dialect note: Quartz has a real last-weekday operator: 0 0 17 ? * 6L (6 = Friday in Quartz numbering, where Sunday = 1). EventBridge uses 0 17 ? * 6L *.
0 17 * * 5The base 0 17 * * 5 fires every Friday. The "last Friday" logic lives in the job: [ "$(date -d '+7 days' +%m)" != "$(date +%m)" ] is true only on the month's final Friday. Quartz expresses it natively as 6L.
0 17 * * 5 means: Run on the last Friday of every month at 17:00 (with a guard). Like the last day of the month, the "last Friday" has no native Unix operator. The portable trick is to fire every Friday (0 17 * * 5) and add a guard in the job that checks whether another Friday remains this month — i.e. whether today + 7 days rolls into the next month. Only the final Friday passes the check.
Use 0 17 * * 5 in the schedule's cron field. The base 0 17 * * 5 fires every Friday. The "last Friday" logic lives in the job: [ "$(date -d '+7 days' +%m)" != "$(date +%m)" ] is true only on the month's final Friday. Quartz expresses it natively as 6L.
EventBridge uses six fields with a required year and a ? placeholder in one day field: 0 17 ? * 5 *. Wrap it as cron(0 17 ? * 5 *) in the console or CloudFormation.
Quartz is seconds-first with a trailing year, so the equivalent is 0 0 17 ? * 5 *. Remember Quartz numbers Sunday as 1, the opposite of Unix.
Browse the full set of cron pattern pages, or jump to the interactive tools: the cron expression builder for designing a schedule from scratch, the cron cheat sheet for a side-by-side reference, the cron timezone translator for moving a schedule between zones and dialects, and the GitHub Actions cron picker for DST-stable CI schedules.