It appears to me that both mean "any of the available values". What exactly in the difference between them?
*
means every possible value in the field. ?
means you don't care about the value. It's used when you have two fields that may contradict each other. The common example being the day of month and day of week fields. Consider, for example a cron specification for running at 10AM on the first day of every month:
0 0 10 1 * ? *
Now let's break it down:
0
- we want it to run on 10:00:000
- we want it to run on 10:00:0010
- we want it to run on 10:00:001
- we want it to run of the 1st of every month*
- we want it to run on every month (e.g., January 1st, February 1st, etc.)?
- we don't care about the day of week. The cron should run on the 1st of every month, regardless of whether it's a Sunday, a Monday, etc.*
- we want it to run on every year