忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT 徽章 文库 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
12下一页
最近访问板块 发新帖
查看: 3282 | 回复: 18

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

论坛徽章:
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双子座
日期:2013-12-17 16:44:37辰龙
日期:2013-11-22 15:20:59狮子座
日期:2013-11-18 22:55:08射手座
日期:2013-11-12 10:54:26巳蛇
日期:2013-11-08 06:25:12
发表于 2013-04-17 12:51 |显示全部楼层
第二行加set -xv
输出看下。
另外看下script的权限。

论坛徽章:
38
辰龙
日期:2013-08-21 15:45:19寅虎
日期:2014-06-09 12:52:17双鱼座
日期:2014-06-10 12:42:44巨蟹座
日期:2014-06-12 23:17:17戌狗
日期:2014-06-17 09:53:29未羊
日期:2014-10-10 13:45:41申猴
日期:2015-03-03 17:21:37亥猪
日期:2015-03-03 17:22:002015亚冠之广州富力
日期:2015-05-12 16:34:522015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:08平安夜徽章
日期:2015-12-26 00:06:30
发表于 2013-04-17 12:53 |显示全部楼层
目测跟环境有关。。。。。

论坛徽章:
0
发表于 2013-04-17 12:57 |显示全部楼层
什么环境?请明示。回复 3# 关阴月飞


   

论坛徽章:
38
辰龙
日期:2013-08-21 15:45:19寅虎
日期:2014-06-09 12:52:17双鱼座
日期:2014-06-10 12:42:44巨蟹座
日期:2014-06-12 23:17:17戌狗
日期:2014-06-17 09:53:29未羊
日期:2014-10-10 13:45:41申猴
日期:2015-03-03 17:21:37亥猪
日期:2015-03-03 17:22:002015亚冠之广州富力
日期:2015-05-12 16:34:522015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:08平安夜徽章
日期:2015-12-26 00:06:30
发表于 2013-04-17 13:00 |显示全部楼层
在脚本开始前引入一下环境变量试试:
  1. #设置环境变量
  2.         .  ~/.bash_profile
复制代码

论坛徽章:
0
发表于 2013-04-17 13:10 |显示全部楼层
回复 2# wenhq

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


论坛徽章:
0
发表于 2013-04-17 13:21 |显示全部楼层
@oyqiaojin

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

论坛徽章:
0
发表于 2013-04-17 13:24 |显示全部楼层
回复 7# todayhero


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

论坛徽章:
0
发表于 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双子座
日期:2013-12-17 16:44:37辰龙
日期:2013-11-22 15:20:59狮子座
日期:2013-11-18 22:55:08射手座
日期:2013-11-12 10:54:26巳蛇
日期:2013-11-08 06:25:12
发表于 2013-04-17 13:35 |显示全部楼层
本帖最后由 wenhq 于 2013-04-17 13:37 编辑

回复 6# oyqiaojin


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

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

本版积分规则

DTCC2018购票6.8折优惠进行时

中国数据库技术大会是国内数据库及大数据领域规模最大、最受欢迎的技术交流盛会。 2018年5月10-12日,第九届中国数据库技术大会将如约而至。本届大会以“数领先机•智赢未来”为主题,设定2大主会场及20个技术专场,邀请来自国内外互联网、金融、教育等行业百余位技术专家,共同探讨Oracle、MySQL、NoSQL、大数据等领域的前瞻性热点话题与技术。
----------------------------------------
优惠时间:2018年2月13日前

报名链接>>
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP