在crontab中使用$(date+ %Y%m%D)的引发的问题

问题原因

前几天有个定时任务执行经常出现问题,开发有没有执行日志,查看/var/log/cron定时任务执行日志,到了执行时间也确实执行了命令,但是没有执行结果,开发说能不能把执行结果展示出来,我说没问题,首先在命令行测试一下,发现执行成功,于是在cron里添加了个重定向,命令如下:

xxxx > /var/log/check/$(date +\%Y\%m\%d)-check.log 2>&1

到了第二天,开发说定时任务依旧没有执行,我说我看看执行日志,发现 /var/log/check/没有定义好的check.log,这下郁闷了,压根没有执行,但是/var/log/cron却显示执行了,实际是执行失败,按照我的理解,即使后面的重定向命令执行失败,是不会影响前面的命令执行的,现实是前面的命令确实没有执行,为了验证,我又在在测试服务期又做了一遍测试,随便写了个命令,按照上面的格式添加了crontab,定时任务依旧没执行,这下妥妥的打脸了,当时还给开发保证,cron命令写的没错,于是百度查找原因,找到了一篇文章:】

Cron job with $(date) command and redirect won’t run

里面在Best answer里有个回答:
I’m not sure how I missed this before but you are using a bash syntax for creating a subshell to run your command in. Since cron is not bash, this won’t work.
原因是你使用了shell,但是cron并不是shell,所以它无法工作。按照Linux命令的执行规则,执行命令是首先执行最右边的子shell,如果子shell执行失败,前面的则不会在执行。而$(date +\%Y\%m\%d)恰恰是个子shell,所说义执行失败
同时作者给了正确的写法:

0   20  *   *   *   /data/code/scripts/foo.sh >/root/foo.`date +\%Y-\%m-\%d-\%T`.log 2>&1

按照文章提示的方法,重新改写,果然执行成功,并且给出来了具体的错误原因,开发修改后,测试了几次,没在出问题。

总结

  • 做任何事话不要说死;
  • 认真测试;
  • 做好笔记;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值