Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1492157
  • 博文数量: 263
  • 博客积分: 10851
  • 博客等级: 上将
  • 技术积分: 2627
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-26 22:40
文章分类

全部博文(263)

文章存档

2013年(4)

2012年(25)

2011年(33)

2010年(50)

2009年(138)

2008年(13)

分类: LINUX

2010-04-22 10:45:31

上午, 一统计的同事咨询偶 ,说他的几个任务加在crontab里, 之前一直执行的很正常, 但是最近这两天发现不执行了。  让人有点莫名其妙, 呵呵。
不过还是可以慢慢来排除:
    一. 之前的日子能正常执行, 大致可以排除环境变量的原因(虽然很多童鞋都没有在需要用crontab执行的任务脚本开头部分加上 export PATH="$U_PATH"的习惯, 有时候也能正常执行)
    二. 既然排除了环境变量的原因, 那就查看下/var/log/messages的日志记录吧(suse默认把cron的任务执行情况记录在这个文件中), 花现这两天的确没有他说的那个脚本的执行记录, 而之前的日子是有执行记录的
    三. 想查看发给root的邮件, 因为crontab在执行有错误的时候可能发送邮件给root, 但是我们的linux默认把sendmail都关闭了, 也就是说crontab就算执行出错或者有输出的时候, 也不会发送邮件给root, 这就有点无从可查了。
    四. 有点纳闷了, 在日志里都不能看到, 说明cron在调用这个脚本的时候就应该出错了, 也就是就算要执行的命令直接写到命令行, 在命令解析之前就会报错的。 遂看其添加到crontab中的任务:
            * * * * * /home/xxx/test.sh >> /home/xxx/test.log 2>>&1
    呃, 不妨把/home/xxx/test.sh >> /home/xxx/test.log 2>>&1 直接拷贝到命令行执行, 花现报错:
    # -bash: syntax error near unexpected token '&'  看来是 2>>&1 出错了。  查了下bash的io重定向操作符, 没有m>>&n 这样的用法, 可能统计的同事想把标准错误也追加到标准输出文件中,  可以猜测, 像这样的, 在命令行解析元字符的过程中就报错的, crontab是会记录在运行日志的。
bash中应该没有 m>>&n 和  &>>x.log   (把1,2都追加到x.log), 在解析>> 的时候, bash应该更希望这个重定向符右边是一个文件, 而不是一个文件地址..  &n , 所以, 就报错说“我要的是一个文件在我右边,  不期望记号 & ” 。 其实有经验的童鞋要把标准错误也追加到标准输出指向的文件时, 只需在标准输出重定向的时候使用>>, 然后再2>&1, 理解了文件描述符是个文件指针, 就应该很好理解这样的用法。

总结下crontab中任务没有执行, 或者不能正确执行的一些原因:
    1. 环境变量问题, 养成良好的习惯, 在脚本开头export PATH
    2. 任务的输出没有重定向造成的可能执行不正确, 如有次在linuxsir坛子里看到的有童鞋在tar文件的时候, 发现tar后的文件大小出奇的小( 任务执行正确与否 ms 还跟发送到标准输出的字节数有关)
    3. 如这次的, 可能统计的童鞋是好心办了坏事, 原来标准输出没有重定向,  这次加上了不正确的重定向。
    4. ..... 欢迎补充
阅读(3270) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~