问题出现得很突然,日志倒是留得挺全。定时任务里用了带格式的日期命令,手动执行正常,放到任务列表里就报错,参数莫名其妙少了一半。

把日志和配置对完,能解释这个现象的基本就这几处。百分号在任务定义里是换行符,必须转义。少数情况下是命令里的引号被解析后丢失。

不容易想到的是,日期格式里的空格被当成了命令分隔。

第一件事是确认任务原文

crontab -l | grep job

接着把百分号转义

0 2 * * * /bin/bash /opt/job.sh >> /tmp/job_$(date +\%F).log 2>&1

或者把逻辑写进脚本

cat /opt/job.sh

剩下的就是执行后观察一次日志

tail -f /var/log/cron

别只看报错消失,验证要多做一步。任务按预期生成带日期的日志文件,命令参数完整,不再报错。

这里还有个坑。把复杂命令包进脚本最省心,任务列表里只留一行调用,转义问题自然就消失了;脚本里再统一处理日期格式,以后换机器也不用重改。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189