Each field takes a number, * for every value, a list (1,15), a range (1-5) or a step (*/15). Months and weekdays can also be written as names such as JAN or MON; Sunday is 0, and most implementations accept 7 too. Shortcuts such as @daily and @hourly stand for common schedules.
Two rules surprise people. When both the day of the month and the day of the week are set, the job runs when either matches, not both: 0 9 1 * 1 runs on the 1st and on every Monday. And cron runs in the time zone of the system, so a job at 02:30 can be skipped or run twice when daylight saving time changes, depending on the implementation.
Some schedulers add a sixth field for seconds or a year, or characters such as L and ?, as Quartz and AWS EventBridge do. They aren’t part of standard crontab, so check which syntax a tool expects. A schedule only says when a job should start; heartbeat monitoring tells you whether it did.