温馨提示×

centos反引号能用于cron吗

小樊
34
2026-10-20 21:21:56
栏目: 智能运维

简短结论:CentOS 的 cron 本身“不支持”直接在 crontab 里用反引号执行命令并替换结果(和 shell 行为不同),但可以通过调用 shell 来间接使用反引号。


1. cron 的执行环境特点

cron 不是交互式 shell,它默认用 /bin/sh 执行命令(CentOS 上通常是 bash 的 POSIX 模式)。

关键点:

  • crontab 里的每一行只是一个命令字符串
  • cron 不会先做反引号 / $() 的命令替换
  • 很多 shell 特性(变量、反引号、管道、重定向)需要 shell 来处理

2. 这样写通常“不生效”

* * * * * echo `date` >> /tmp/test.log

在 cron 中:

  • 反引号 不会先被执行
  • 实际可能写入的是字面量 `date`(或行为不可预期)

3. 正确用法:让 shell 来处理反引号

✅ 方法一:显式调用 shell

* * * * * /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

4. 更推荐的写法(不用反引号)

在现代脚本里,建议用 $() 替代反引号:

echo "$(date)" >> /tmp/test.log

5. 总结

场景 是否可用反引号
crontab 直接写反引号 ❌ 不推荐 / 不可靠
用 sh -c 包裹 ✅ 可以
写在 shell 脚本里 ✅ 可以
systemd timer ✅(本质是 shell)

如果你愿意,可以贴一下你具体的 crontab 行,我可以直接帮你改成可用版本。

0 踩