记录一次crontab 定时任务执行脚本失败问题

61 阅读1分钟

问题描述

通过crontab 定时执行删除文件的脚本,并把执行脚本的输出重定向到一个含有日期的日志文件中。

结果配置完之后发现定时任务并没有正常执行,该删除的文件都没有删除,但是直接执行脚本并追加日志是可以正常执行的,且能生成日志

[root@gone ~]# crontab -l
*/1 * * * * /cronscripts/cronDelImgAndUpload.sh >> /cronscripts/delete.log.$(date +%Y%m%d) 2>&1
--- 1分钟之后查看生成的日志
[root@gone cronscripts]# ll
total 0
[root@gone ~]# sh cronDelImgAndUpload.sh >> /cronscripts/delete.log.$(date +%Y%m%d) 2>&1
[root@gone cronscripts]# ls
-rw-r--r--. 1 root  root       0 Aug 30 10:57 delete.log.20230830

原因

crontab 脚本中 直接写 $(date +%Y%m%d)’ 其中的 ‘%’ 没有转义导致不能被识别从而影响到定时任务对脚本的执行。 正确写法为:$(date +"\%Y\%m\%d") 而不是这样:$(date +%Y%m%d)

修改之后再执行

---修改之后的脚本
[root@gone ~]# crontab -l
*/1 * * * * /cronscripts/cronDelImgAndUpload.sh >> /cronscripts/delete.log$(date +"\%Y\%m\%d") 2>&1

[root@gone cronscripts]# ls
-rw-r--r--. 1 root  root       34 Aug 30 11:05 delete.log.20230830