Crontab 任务调度中脚本使用时间参数

losetowin 发布于:2014-7-9 12:04 分类:linux  有 8134 人浏览,获得评论 54 条  

本文地址:http://www.dutycode.com/post-60.html
除非注明,文章均为 www.dutycode.com 原创,欢迎转载!转载请注明本文地址,谢谢。

1、问题描述     

     crontab任务调度中,需要执行一个脚本,脚本需要传入时间参数

2、初始实现方式
     00 10 * * * cd /home/zzh && sh test.sh $(date +"%Y%m%d") >/dev/null 2>&1
     任务调用时,发现调度任务失败,错误位置在$(date
     很明显,调度任务没有识别出来 $(date +"%Y%m%d") 参数

3、解决办法
     任务调度中,%是个特殊字符,表示特殊含义,所以不能直接使用%,而需要添加反斜杠来进行转义,上述任务调度修改为
     00 10 * * * cd /home/zzh && sh test.sh $(date +"\%Y\%m\%d") >/dev/null 2>&1


PS:看到网上有种说法是这样的,
     百分号%将转换为空行,所以如果要使用 % 或其他任何特殊字符,就要在前面加上反斜线。
     第一个 % 之前的一行传递给 shell,这个 % 之后的所有行都作为标准输入传递。

上述说法未做考证。

参考:http://bbs.chinaunix.net/thread-1194313-1-1.html



补充:

1)新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。
2)每条 JOB 执行完毕之后,系统会自动将输出发送邮件给当前系统用户。日积月累,非常的多,甚至会撑爆整个系统。所以每条 JOB 命令后面进行重定向处理是非常必要的: >/dev/null 2>&1 。前提是对 Job 中的命令需要正常输出已经作了一定的处理, 比如追加到某个特定日志文件。
3)当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。
4)千万别乱运行crontab -r。它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了。
5)在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义\%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+\%Y\%m\%d’`

内容来源:http://bbs.chinaunix.net/thread-2291457-1-1.html



版权所有:《攀爬蜗牛》 => 《Crontab 任务调度中脚本使用时间参数
本文地址:https://www.dutycode.com/post-60.html
除非注明,文章均为 《攀爬蜗牛》 原创,欢迎转载!转载请注明本文地址,谢谢。