免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4541 | 回复: 18
打印 上一主题 下一主题

[系统管理] shell脚本 ,添加到crontab 中执行的时候,就有错 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-04-17 12:49 |只看该作者 |倒序浏览
本帖最后由 oyqiaojin 于 2013-04-17 14:11 编辑


写了个脚本,主要是对mysql的主从的监控,手动执行的时候正常
  日志文件check_repl.log,内容如下:
    ##############################################
Master_Log:000030
Master_Log_Pos:176025373
Relay_Master_Log_File:000030
Exec_Master_Log_Pos:176025373
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
Seconds_Behind_Master:0
0
2013-04-17 12:43:12 Master-Slave is OK.

当我添加到crontab中定时执行的时候,就是这样了
##############################################
Master_Log:000030
Master_Log_Pos:176025373
Relay_Master_Log_File:
Exec_Master_Log_Pos:
Slave_IO_Running:
Slave_SQL_Running:
Seconds_Behind_Master:
2013-04-17 12:05:01 Error:不能获取slave的相关参数



请问为什么会获取不到slave的值能?mysql  主从都是正常的。

这是我脚本
  1. #!/bin/sh
  2. user=replmonitor
  3. passwd=123456
  4. master_ip=192.168.1.108
  5. log="/home/mysql/data/check_repl.log"
  6. IPADD=`ifconfig $1|sed -n 2p|awk  '{ print $2 }'|awk -F : '{ print $2 }'`
  7. #`ifconfig|grep inet|awk '{print $2}'|sed 's/addr://g'| grep -Ev "^$"`;
  8. HOST_NAME="db002";
  9. NOWTIME=`date +"%Y-%m-%d %H:%M:%S"`;
  10. MAILTO="ouyangqiaojin@ppdai.com";
  11. MAIL_SUB="$host_name log-slave Capacity Report $NOWTIME !";
  12. tmpfile=/tmp/mysql_mon.tmp


  13. value()
  14. {
  15. master=`/usr/local/mysql/bin/mysql -u$user -p$passwd -h$master_ip -e "show master status\G;"|egrep "File|Position"`
  16. slave=`mysql -u$user -p$passwd -e "show slave status\G;"|egrep "Relay_Master_Log_File|Exec_Master_Log_Pos|Seconds_Behind_Master|Slave_IO_Running|Slave_SQL_Running"`

  17. #取主库上的bin-log号及写入的当前日志位置   
  18. #echo $master>>$log
  19. #echo $slave>>$log

  20. Master_Log=`echo $master |awk '{print $2}'|awk -F "." '{print $2}'`
  21. Master_Log_Pos=`echo $master |awk '{print $4}'`

  22. #取从库上当前同步主库的位置
  23. Relay_Master_Log_File=`echo $slave |awk '{print $2}'|awk -F "." '{print $2}'`
  24. Exec_Master_Log_Pos=`echo $slave |awk '{print $8}'`
  25. Slave_IO_Running=`echo $slave |awk '{print $4}'`
  26. Slave_SQL_Running=`echo $slave |awk '{print $6}'`
  27. Seconds_Behind_Master=`echo $slave |awk '{print $10}'`

  28. echo "Master_Log:"$Master_Log>>$log
  29. echo "Master_Log_Pos:"$Master_Log_Pos>>$log
  30. echo "Relay_Master_Log_File:"$Relay_Master_Log_File>>$log
  31. echo "Exec_Master_Log_Pos:"$Exec_Master_Log_Pos>>$log
  32. echo "Slave_IO_Running:"$Slave_IO_Running>>$log
  33. echo "Slave_SQL_Running:"$Slave_SQL_Running>>$log
  34. echo "Seconds_Behind_Master:"$Seconds_Behind_Master>>$log
  35. }


  36. mhead()
  37. {
  38.         echo "" >$tmpfile;
  39.         echo "From :$HOST_NAME" >>$tmpfile
  40.         echo "State :Error" >>$tmpfile
  41.         echo "ReportBy:$0" >> $tmpfile
  42.         echo "DateTime:$NOWTIME" >> $tmpfile
  43.         echo "Info :$host_name Master-Slave Exception!!" >> $tmpfile
  44.         echo "      Master_Log:"$Master_Log>>$tmpfile
  45.         echo "      Master_Log_Pos:"$Master_Log_Pos>>$tmpfile
  46.         echo "      Relay_Master_Log_File:"$Relay_Master_Log_File>>$tmpfile
  47.         echo "      Exec_Master_Log_Pos:"$Exec_Master_Log_Pos>>$tmpfile
  48.         echo "      Slave_IO_Running:"$Slave_IO_Running>>$tmpfile
  49.         echo "      Slave_SQL_Running:"$Slave_SQL_Running>>$tmpfile
  50.         echo "      Seconds_Behind_Master:"$Seconds_Behind_Master>>$tmpfile
  51.         echo "IP :$IPADD" >> $tmpfile
  52.         echo "" >>$tmpfile;
  53. }


  54. smail()
  55. {
  56. #mhead
  57. mail -s "MAIL_SUB" $MAILTO < $tmpfile

  58. }


  59. for((i=1;i<=10;i++));
  60. do

  61.     echo "##############################################">>$log
  62.     value
  63.     #smail
  64. for x in `mysql -u$user -p$passwd  -e "show slave status\G" | grep Running | grep -ie "IO" | awk '{print $2}'`
  65. do

  66.     if [ $x != Yes ]; then
  67.        echo "$NOWTIME Error:Slave_IO_Running is not Yes" >>$log
  68.        mhead;
  69.        mysql -u$user -p$passwd -e "show slave status\G" >> $tmpfile;
  70.        smail;
  71.        exit 0;
  72.     fi
  73. done

  74. for y in `mysql -u$user -p$passwd -e "show slave status\G" | grep Running | grep -ie "SQL" | awk '{print $2}'`
  75. do

  76.     if [ $y != Yes ]; then
  77.        echo "$NOWTIME Error:Slave_SQL_Running is not Yes" >>$log
  78.        mhead;
  79.        mysql -u$user -p$passwd -e "show slave status\G" > $tmpfile;
  80.        smail;
  81.        exit 0;
  82.     fi
  83. done
  84. if [ "$Relay_Master_Log_File" != "" ];then
  85. if [ $Master_Log -eq $Relay_Master_Log_File ];then
  86.        A=`expr $Master_Log_Pos - $Exec_Master_Log_Pos`

  87.        if [ $A -lt 0 ];then
  88.              A=`expr 0 - $A`
  89.        fi

  90.        echo $A>>$log
  91.        #echo "">>$log

  92.        if [ $A -lt 10000 ];then
  93.              echo "$NOWTIME Master-Slave is OK.">>$log
  94.              #echo "$i"
  95.              break
  96.        else
  97.              if [ $i ge 3 ];then              
  98.                   echo "$NOWTIME Warning:Slave-Master lag $A " >>$log
  99.                   echo "$i"
  100.              fi
  101.              sleep 30
  102.              continue
  103.        fi

  104. else
  105.        sleep 60
  106.        fi
  107.        if [ $i -eq 10 ];then
  108.              echo "$i"
  109.              echo "$NOWTIME Error:Slave-Master must be check !" >>$log
  110.             mhead      
  111.             smail
  112.        fi
  113. else
  114.        echo "$NOWTIME Error:不能获取slave的相关参数 " >>$log
  115.        mhead
  116.        smail
  117. fi   
  118. done
复制代码
----------------------------------------------------------------------------------------------------------
感谢各位!问题已经找到,是环境变量的问题,我把所有的路径都换成绝对路径
比如:
  1. slave=`mysql -u$user -p$passwd -e "show slave status\G;"|egrep "Relay_Master_Log_File|Exec_Master_Log_Pos|Seconds_Behind_Master|Slave_IO_Running|Slave_SQL_Running"`
复制代码
我换成
  1. slave=`/usr/local/mysql/bin/mysql -u$user -p$passwd -e "show slave status\G;"|egrep "Relay_Master_Log_File|Exec_Master_Log_Pos|Seconds_Behind_Master|Slave_IO_Running|Slave_SQL_Running"`
复制代码
---------------------------------------------------------------------------------------------------------

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每月发帖之星
日期:2015-09-11 19:30:52IT运维版块每周发帖之星
日期:2015-09-11 19:20:31IT运维版块每日发帖之星
日期:2015-08-26 06:20:00每日论坛发贴之星
日期:2015-08-20 06:20:00IT运维版块每日发帖之星
日期:2015-08-20 06:20:002015年辞旧岁徽章
日期:2015-03-03 16:54:15金牛座
日期:2014-05-04 16:58:09双子座
日期:2013-12-17 16:44:37辰龙
日期:2013-11-22 15:20:59狮子座
日期:2013-11-18 22:55:08射手座
日期:2013-11-12 10:54:26
2 [报告]
发表于 2013-04-17 12:51 |只看该作者
第二行加set -xv
输出看下。
另外看下script的权限。

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
3 [报告]
发表于 2013-04-17 12:53 |只看该作者
目测跟环境有关。。。。。

论坛徽章:
0
4 [报告]
发表于 2013-04-17 12:57 |只看该作者
什么环境?请明示。回复 3# 关阴月飞


   

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
5 [报告]
发表于 2013-04-17 13:00 |只看该作者
在脚本开始前引入一下环境变量试试:
  1. #设置环境变量
  2.         .  ~/.bash_profile
复制代码

论坛徽章:
0
6 [报告]
发表于 2013-04-17 13:10 |只看该作者
回复 2# wenhq

在脚本的第二行加了   set -xv,执行脚本任务都不执行了,请问   set -xv是干什么用的?
是在root用户下添加的任务,脚本权限为-rwxr-xr-x.   这应该没问题。


论坛徽章:
0
7 [报告]
发表于 2013-04-17 13:21 |只看该作者
@oyqiaojin

mysql主从监控为什么不使用nagios之类的工具为实现呢?

论坛徽章:
0
8 [报告]
发表于 2013-04-17 13:24 |只看该作者
回复 7# todayhero


    亲,我之前没弄过主从的监控,就写个脚本试试,像nagios之类的工具,能发现从断掉之后,主动发出警告吗?

论坛徽章:
0
9 [报告]
发表于 2013-04-17 13:34 |只看该作者
@oyqiaojin

可以的,我是通过发邮件到189.cn邮件,收到邮件到后也可以开启189.cn邮箱的短信通知功能,去查看邮件。

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每月发帖之星
日期:2015-09-11 19:30:52IT运维版块每周发帖之星
日期:2015-09-11 19:20:31IT运维版块每日发帖之星
日期:2015-08-26 06:20:00每日论坛发贴之星
日期:2015-08-20 06:20:00IT运维版块每日发帖之星
日期:2015-08-20 06:20:002015年辞旧岁徽章
日期:2015-03-03 16:54:15金牛座
日期:2014-05-04 16:58:09双子座
日期:2013-12-17 16:44:37辰龙
日期:2013-11-22 15:20:59狮子座
日期:2013-11-18 22:55:08射手座
日期:2013-11-12 10:54:26
10 [报告]
发表于 2013-04-17 13:35 |只看该作者
本帖最后由 wenhq 于 2013-04-17 13:37 编辑

回复 6# oyqiaojin


    debug
你的加 set -xv
不是 set -xv,

最基本的错误.
#/bin/sh =====> #!/bin/sh
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP