简短结论:CentOS 的 cron 本身“不支持”直接在 crontab 里用反引号执行命令并替换结果(和 shell 行为不同),但可以通过调用 shell 来间接使用反引号。
cron 不是交互式 shell,它默认用 /bin/sh 执行命令(CentOS 上通常是 bash 的 POSIX 模式)。
关键点:
$() 的命令替换* * * * * echo `date` >> /tmp/test.log
在 cron 中:
`date`(或行为不可预期)* * * * * /bin/sh -c 'echo `date` >> /tmp/test.log'
或
* * * * * bash -c 'echo `date` >> /tmp/test.log'
这样反引号是在 shell 里执行的。
* * * * * /root/myjob.sh
/root/myjob.sh:
#!/bin/bash
echo `date` >> /tmp/test.log
并赋予执行权限:
chmod +x /root/myjob.sh
在现代脚本里,建议用 $() 替代反引号:
echo "$(date)" >> /tmp/test.log
| 场景 | 是否可用反引号 |
|---|---|
| crontab 直接写反引号 | ❌ 不推荐 / 不可靠 |
用 sh -c 包裹 |
✅ 可以 |
| 写在 shell 脚本里 | ✅ 可以 |
| systemd timer | ✅(本质是 shell) |
如果你愿意,可以贴一下你具体的 crontab 行,我可以直接帮你改成可用版本。