A cleanup job was supposed to run every five minutes. The crontab was saved at 10:03. The next log lines were 10:05 and 10:10. That gap is the schedule. */5 in the minute field begins at 0 and steps by five: 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, and 55. Saving the file does not store a countdown. On classic cron the next start still happens while the previous command is running. The lines below are the five-field form on Vixie cron and cronie.
The clock list
Each of these is aligned to the clock, and each one includes minute 0.
*/5 * * * * # 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55 */10 * * * * # 0, 10, 20, 30, 40, 50 */15 * * * * # 0, 15, 30, 45 */30 * * * * # 0 and 30 5-59/5 * * * * starts the range at 5, so minute 0 is left out. Keep that form only when the top of the hour should stay quiet. A plain every-five-minutes job is */5 * * * *.
There is no seconds field. The daemon starts the command once, when that minute begins.
Three limits
The day-of-month field starts at 1. On Vixie cron and cronie, * in that field is 1-31, so 0 0 */5 * * is midnight on the 1st, 6th, 11th, 16th, 21st, 26th, and 31st. Dates divisible by 5 are the 5th, 10th, 15th, 20th, 25th, and 30th. If the daemon is not cronie, test that list on the host. The cron expression generator shows the five fields. It does not install the job, and it does not simulate one daemon's calendar.
A seconds field in front of a crontab line shifts the other fields to the right. Quartz uses six fields, or seven when a year is included, and the first field is seconds. Spring uses that six-field form. EventBridge uses six fields and no seconds field: minutes, hours, day-of-month, month, day-of-week, and year. Quartz and EventBridge both use ? in a day field. A five-field line matches neither shape. systemd timers use OnCalendar. Leave */5 * * * * out of a timer unit, and check the value with systemd-analyze calendar on that machine.
Traditional Vixie cron does not skip a start because the previous process is still going. A command that takes six minutes overlaps the next */5 mark. When the work must not overlap, take a lock in the command, for example with flock, and leave the schedule as it is. Call the program by its absolute path. Cron's PATH is often shorter than a login shell.
One tip
*/5 cannot mean five minutes from now. Sleep inside a process, or use a queue delay, when the wait should start from an arbitrary moment. Cron still wakes on 0, 5, 10, and the rest of that list.
To watch one cycle, point a throwaway line at a file you can delete.
*/5 * * * * date >> /tmp/cron-every-5.log Wait until two lines have been written. The minutes should be five apart, and each minute should be divisible by 5. Then delete the line. A * in the minute field means every minute.
The field table and the rest of the questions are in the guide: https://kepttools.com/guides/cron-every-5-minutes