Chinaunix首页 | 论坛 | 博客
  • 博客访问: 567601
  • 博文数量: 84
  • 博客积分: 1529
  • 博客等级: 上尉
  • 技术积分: 1482
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-27 17:57
文章分类

全部博文(84)

文章存档

2014年(7)

2013年(9)

2012年(20)

2011年(48)

分类: LINUX

2011-08-30 14:09:03

问题描述:
1、脚本中需要用ifconfig获取机器的IP地址,但是此脚本放置于crontab中调用总是获取不到IP
2、单独运行此命令或者写一个简单的脚本单独测试却都是OK的
3、在运行的脚本的ifconfig命令前面加入全路径就可以解决这个问题。
 
总结:
这是用于crontab不加载用户的环境变量导致的。
 
解决方法:
脚本中所有的命令和工具使用绝对路径例如/usr/local/bin/mysql,或者在脚本前面执行一下profile文件:. /etc/profile即可
 
2.crontab执行结果不对
    例如:
    判断一个文件生成时间是每天18:00生成的
    -rw-r--r--  1 user  user   30555594 2009-05-15 18:00 text.txt
    if [ `ls -al test.txt |awk ’{print $7}’` == "18:00" ]
    then
      ………………
    fi
    在客户端测试没有问题,可是放到crontab中,就判断不对了。
    其实这还是用户环境的问题,
    客户端登陆的时候会自动加载/etc/sysconfig/language(一般在/etc/profile文件中加载),
    其中有的机器会设置客户端字符集:
    RC_LANG="en_US.ISO-8859-1"
    使用env|grep LANG的结果是
    LANG=en_US.ISO-8859-1
    这个时候ls等命令的结果是:
    -rw-r--r--  1 user  user   30555594 2009-05-15 18:00 text.txt
    时间在第七个字段。
    当crontab自动执行的时候,字符集没有设置
    使用env|grep LANG的结果是空
    这个时候ls等命令的结果是:
    -rw-r--r-- 1 mqq mqq   12785 May 15 18:00 text.txt
    时间在第八个字段,判断第七个字段为时间的脚本就出错了。
    解决方法:
    这个时候在脚本前面加上export LANG=en_US.ISO-8859-1或者执行一下profile文件:. /etc/profile即可
 
3.crontab占用大量机器资源
    日志服务器172.16.0.100偶尔出现crond占用了cpu非常高的情况
    使用pstree查看是调用stat_day_log.sh这个脚本导致crond占用cpu过高
    查看crontab的配置:
    */10 * * * * /usr/local/dev/Y_script/stat_day_log.sh 5
    然而执行这个脚本,非常快就完成了,一点也不占用资源
    而且理论上,及时脚本非常占用资源,调用它的crond也不会占用资源才对。
    再次执行脚本发现,脚本有错误输出:
    gzip: Y.YUiS_20090602.log.gz: No such file or directory
    于是想到,会不会是由于crontab没有默认tty(默认输出)导致呢?
    于是加上
    */10 * * * * /usr/local/dev/Y_script/stat_day_log.sh 5  2>&1 >> /usr/local/dev/Y_script/stat_day_log.log
    果然问题解决了。为了确认到底是正常输出还是错误输出导致crontab僵死,进行了以下两个配置:
    */10 * * * * /usr/local/dev/Y_script/stat_day_log.sh 5  >> /usr/local/dev/Y_script/stat_day_log.log
    还是有问题。
    于是可以确认是由于crontab没有将默认错误输出重定向到指定文件导致。
    这种问题也不是一定重现,只有负载很高的时候偶尔会出现(一出现就会造成机器僵死宕机)。
    解决方法:
    养成良好的习惯,crontab默认加上错误日志重定向,如果不需要错误日志信息,也需要加上:> /dev/null 2>&1
 
阅读(2695) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~