I read 0 0 */5 * * as midnight on the 5th, 10th, 15th, 20th, 25th, and 30th. On Vixie cron and cronie that is wrong. The day-of-month field does not start at 0. Its range starts at 1. A star in that field is 1-31, so a step of five lands on the 1st, 6th, 11th, 16th, 21st, 26th, and 31st.

Build the five fields in the cron expression generator. The page shows the fields. It will not simulate a particular daemon’s calendar. If the host is not cronie, test the list before you trust it.

Why minutes feel different

In the minute field, * is shorthand for 0-59. So */5 is 0, 5, 10, through 55. Twelve runs an hour. That is why */5 * * * * feels obvious.

The day-of-month field has no day 0. The same /5 pattern therefore starts at 1 and walks 1, 6, 11, 16, 21, 26, 31.

*/5 * * * * # minutes: 0, 5, 10, …, 55 0 0 */5 * * # days: 1, 6, 11, 16, 21, 26, 31 

What this line is not

It is not “every fifth calendar date.” Dates divisible by 5 would be 5, 10, 15, 20, 25, and 30. That is a different set.

It is not a Quartz or EventBridge expression. Those use six fields. Quartz puts seconds first. EventBridge has no seconds field and uses ? in one day field. A five-field line from this site matches neither shape.

Copy the fields, not the English beside them. Crontab has no use for the sentence “every five days.”

Confirm on the host

Point a throwaway line at a log you can delete, or read the next few fire dates from your daemon’s docs and tools. Use an absolute path for real jobs. Cron’s PATH is often short.

The minute steps, the clock lock on */5, and the overlap warning are in the same guide: https://kepttools.com/guides/cron-every-5-minutes