首页/系统/Linux 运维命令速查/cron 命令中的百分号转义
定时任务与计划50 条

cron 命令中的百分号转义

在 crontab 任务行里 % 有特殊含义:未转义时被转成换行、其后内容作为命令标准输入;date 格式化必须写成 \% 或用脚本包装。

Linux 运维命令速查系统更新于 2026-10-13

百分号转义是什么

在任务行里百分号有特殊含义:未转义时它会被转换成换行,其后的内容作为命令的标准输入。因此日期格式化这类写法必须转义,或者干脆放进脚本,避免出现命令被触发但参数悄悄丢失的怪现象。

基本信息

用途在任务行里正确书写含百分号的命令
规则只有转义后的百分号才作为字面字符
影响范围仅任务行本身,脚本文件内部不受影响
推荐把逻辑写进脚本,任务行只留调用

典型使用场景

  • 日期格式化:生成带日期的备份文件名时必然遇到百分号
  • 时间戳拼装:把时间写进日志名或输出文件名
  • 排查怪现象:命令明明执行了却没有输出,先怀疑百分号被吞
  • 统一风格:把含百分号的命令封装成脚本,省掉每次转义
  • 迁移核对:从别处复制来的任务行要检查百分号是否正确转义

错误与正确写法

错误与正确写法
# 错误:日期格式里的百分号未转义
0 1 * * * echo $(date +%F) > /tmp/d.txt

# 正确写法一:转义
0 1 * * * echo $(date +\%F) > /tmp/d.txt

# 正确写法二(推荐):放进脚本
0 1 * * * /opt/scripts/write-date.sh

位置与行为

位置百分号行为处理方式
任务行未转义即转成换行需要字面量时加反斜杠转义
百分号之后内容被当作标准输入会被静默吞掉,难以察觉
脚本文件无特殊含义脚本内部直接写即可
系统任务文件规则与用户任务表不同仍推荐统一用脚本包装
任务行中第一个未转义的百分号之后的内容全部作为标准输入,表现为命令被触发但参数悄悄丢失。
这条规则只作用于任务行本身,脚本文件内的百分号不受影响,所以封装成脚本是最省心的做法。
上线前用与计划任务相同的环境空跑一次,能提前暴露转义与路径类问题。

易错点

  • 百分号未转义会导致命令被触发但参数丢失,排查时往往看不出任何报错
  • 这条规则只作用于任务行,脚本内正常写即可,不要在脚本里也跟着转义
  • 转义符本身可能被编辑器或复制粘贴环节吃掉,改完要看最终落盘内容
  • 依赖登录环境变量的写法在计划任务环境里会失败,路径与变量都要显式声明

数据来源与参考

  • man 5 crontab(percent 处理规则)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌