0 2 * * * /bin/tar czf /backup/db-$(date +\%F).tar.gz /data # 更稳的写法 0 2 * * * /bin/bash /opt/scripts/backup.sh
备份文件名想带上当天日期 手动执行没问题 写进 crontab 之后文件名只剩一半 后面的重定向也一起失效。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:crontab 里百分号会被当成换行 从百分号开始的后半段变成标准输入 日期格式里每个百分号都得写成反斜杠加百分号 不然后半段直接丢失。
「cron 百分号转义」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。监控和日志的时间要对上,时区不一致会多绕很大一圈。
临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
处理上按这个顺序:把命令里出现的每个百分号 前面都补一个反斜杠;更省事的做法是把日期逻辑挪进脚本 由脚本自己拼文件名;改完用 crontab -l 看一遍 确认每个反斜杠都还在原来的位置。
确认没问题再收工,生成的文件名带完整日期 例如 db-2026-11-09.tar.gz 体积正常且能正常解压一次。
