The % Sign Breaks Cron Commands
Cron treats an unescaped % specially: the first % ends the command and everything after it becomes standard input, and later % become newlines. That silently breaks date formats like date +%Y-%m-%d. Escape each percent as \% in the crontab.
Escape every percent
Put a backslash before each %:
* * * * * echo $(date +\%Y-\%m-\%d) >> /var/log/job.log
Without the backslashes cron cuts the command at the first % and the date format never runs.
Why this happens
In crontab, % is a metacharacter: the text before the first unescaped % is the command, and text after it is fed to the command on stdin, with additional % acting as newlines. This only applies inside crontab lines, not in scripts.
Cleaner fix: move it into a script
Put the logic in a shell script and call the script from cron. Inside the script % has no special meaning, so date +%Y-%m-%d works normally.
FAQ
Why does % break my cron command?
Cron treats % as a metacharacter: the first % ends the command and the rest becomes stdin, later % become newlines. So date +%Y silently fails.
How do I escape % in crontab?
Put a backslash before each percent: date +\%Y-\%m-\%d. Or move the command into a script where % is not special.
Does % need escaping inside a script called by cron?
No. The % rule only applies to the crontab line itself. Inside a shell script called from cron, use % normally.