Linux运维必会的实战编程笔试题(19题)

企业面试题1(生产实战案例):监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员。提示:如果没主从同步环境,可以用下面文本放到文件里读取来模拟:

阶段1:开发一个守护进程脚本每30秒实现检测一次。

阶段2:如果同步出现如下错误号(1158,1159,1008,1007,1062),则跳过错误。

阶段3:请使用数组技术实现上述脚本(获取主从判断及错误号部分)

#假设文件为/log/test/mysql/err
#假设错误为: error:1120:...
#!/bin/bash
#
#监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员。提示:如果没主从同步环境,可以用下面文本放到文件里读取来模拟:
#阶段1:开发一个守护进程脚本每30秒实现检测一次。
#阶段2:如果同步出现如下错误号(,,,,),则跳过错误。
#阶段3:请使用数组技术实现上述脚本(获取主从判断及错误号部分)
#假设文件为/log/test/mysql/err
#假设错误为: error::...
#
#version 0.1
# errlocate='/log/test/mysql/err'
declare -a errnums
declare -i j= function msgbox(){
echo "MySQL error number is $1" | mail -s mysql.error.alert root
} while true; do
if [ `grep 'error:[[:digit:]]\+:' ${errlocate}` ];then
for i in `grep -o 'error:[[:digit:]]\+:' ${errlocate} | grep -o '[[:digit:]]\+'` ; do
errnums[$j]=$i;
case ${errnums[$j]} in
) continue;;
) continue;;
) continue;;
) continue;;
) continue;;
*);;
esac
#echo "mysql.errnums=${errnums[$j]}" 测试用
msgbox ${errnums[$j]}
let j++
#echo "j=$j" 测试用
done
#echo "it should be sleeped" 测试用
sleep 30s
j=
else
sleep 30s
#没有报错就直接等待30s
fi
done

后台运行之:

--[root@vm]: /tmp/sh # chmod -x ywtest1.sh
--[root@vm]: /tmp/sh # .ywtest1.sh &

不过这个办法并不绝对可靠, 再使用pstree命令时, 自动退出了:

使用 crontab -e创建守护进程, 同时也要取消源代码中的while循环

参考:

linux crontab & 每隔10秒执行一次

--[root@vm]: /tmp/sh # crontab -e
* * * * * /bin/bash /tmp/sh/ywtest1.sh
* * * * * sleep 30s;/bin/bash /tmp/sh/ywtest1.sh

看一下执行效果:

每分钟两封邮件, 即30s一封


但是, 这样会产生一个问题, 当有多个错误码时, 每个错误码都会发一封邮件, 而其本身就是30s执行一次, 所以应该把一次执行的报错结果, 集中到一封邮件中;

解决办法: 修正msgbox函数, 直接输出errnums数组, 不需要参数;

输出数组问题: case屏蔽掉的也会输出出来, 原因在于先赋值给数组后进行筛选

解决办法: 改变赋值次序;


最终版本:

#!/bin/bash
#
#监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员。提示:如果没主从同步环境,可以用下面文本放到文件里读取来模拟:
#阶段1:开发一个守护进程脚本每30秒实现检测一次。
#阶段2:如果同步出现如下错误号(,,,,),则跳过错误。
#阶段3:请使用数组技术实现上述脚本(获取主从判断及错误号部分)
#文件为/log/test/mysql/err
#错误为: error::...
#
#version 0.1
# errlocate='/log/test/mysql/err'
declare -a errnums
declare -i j= function msgbox(){ echo "MySQL error number is ${errnums[@]}" | mail -s mysql.error.alert root }
#删掉while if grep 'error:[[:digit:]]\+:' ${errlocate};then
for i in `grep -o 'error:[[:digit:]]\+:' ${errlocate} | grep -o '[[:digit:]]\+'` ; do
case $i in #改变赋值给数组的次序
) continue;;
) continue;;
) continue;;
) continue;;
) continue;;
*);;
esac
#echo "mysql.errnums=${errnums[$j]}"
errnums[$j]=$i;
let j++
#echo "j=$j"
done
#echo "it should be sleeped"
msgbox #取消参数传递, 直接使用数组输出
sleep 30s
j=
else
sleep 30s
#没有报错就直接等待30s
fi

DONE, 后续敬请期待!

运维派 企业面试题1 监控MySQL主从同步是否异常的更多相关文章

  1. 运维派 企业面试题6 防dos攻击

    Linux运维必会的实战编程笔试题(19题) 企业实战题6:请用至少两种方法实现! 写一个脚本解决DOS攻击生产案例 提示:根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到 ...

  2. 运维派 企业面试题4&5 创建10个 用户 ; ping探测主机是否在线

    Linux运维必会的实战编程笔试题(19题) 企业面试题4: 批量创建10个系统帐号oldboy01-oldboy10并设置密码(密码为随机8位字符串). #!/bin/bash # ;i<=; ...

  3. 运维派 企业面试题3 为上题中的 "十个随机字母_test.html" 文件 更名

    Linux运维必会的实战编程笔试题(19题) 企业面试题3 #将试题2中创建的文件名uopiyhgawe_test.html# test-->修改为omg,html-->HTML 方法一: ...

  4. 运维派 企业面试题2 创建10个 "十个随机字母_test.html" 文件

    Linux运维必会的实战编程笔试题(19题) 企业面试题2: 使用for循环在/tmp/www目录下通过随机小写10个字母加固定字符串test批量创建10个html文件,名称例如为: --[root@ ...

  5. shell脚本监控MySQL主从同步

    企业面试题1:监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员. 阶段1:开发一个守护进程脚本每30秒实现检测一次. 阶段2:如果同步出现如下错误号(1158,1159,1008, ...

  6. 用shell脚本监控MySQL主从同步

    企业面试题1:(生产实战案例):监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员.提示:如果没主从同步环境,可以用下面文本放到文件里读取来模拟:阶段1:开发一个守护进程脚本每30秒 ...

  7. 监控mysql主从同步

    1,昨天看到shell一道面试题,需求如下: 监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员.提示:如果没主从同步环境,可以用下面文本放到文件里读取来模拟:阶段1:开发一个守护进 ...

  8. 监控mysql主从同步状态是否异常

    监控mysql主从同步状态是否异常,如果异常,则发生短信或邮寄给管理员 标签:监控mysql主从同步状态是否异常 阶段1:开发一个守护进程脚本每30秒实现检测一次. 阶段2:如果同步出现如下错误号(1 ...

  9. zabbix3.0.4监控mysql主从同步

    zabbix3.0.4监控mysql主从同步 1.监控mysql主从同步原理: 执行一个命令 mysql -u zabbix -pzabbix -e 'show slave status\G' 我们在 ...

随机推荐

  1. C#中的CSP(Communicating sequential processes)

    说起Golang(后面统称为Go),就想到他的高并发特性,在深入一些就是 Goroutine.在大家被它优雅的语法和简洁的代码实现的高并发程序所折服时,其实C#/.NET也可以很容易的做到.今天我们来 ...

  2. 17.广度优先遍历bfs

    #include <iostream> #include <boost/config.hpp> //图(矩阵实现) #include <boost/graph/adjac ...

  3. hihocoder1415 重复旋律3

    思路: 扫一遍height 判一下即可 //By SiriusRen #include <cstdio> #include <cstring> #include <alg ...

  4. C#线程调用带参数的方法,给控件赋值

    System.Threading.Thread thread = new System.Threading.Thread(() => { //各种业务 //定义一个委托 public deleg ...

  5. ORACLE查询优化之is null和is not null优化

    最近工作的时候遇到了比较大的数据查询,自己的sql在数据量小的时候没问题,在数据量达到300W的时候特别慢,只有自己优化sql了,以前没有优化过,所以记录下来自己的优化过程,本次是关于is null和 ...

  6. git clone 和 git pull 代码无响应

    记录一下今天 git 拉代码遇到的一些异常情况: 无论是项目目录下 git pull 还是直接 git clone 都不能正常拉代码: 异常情况1 ssh: connect to host gitee ...

  7. HDU-2896 病毒侵袭 字符串问题 AC自动机

    题目链接:https://cn.vjudge.net/problem/HDU-2896 题意 中文题 给一些关键词和一个字符串,问字符串里包括了那几种关键词 思路 直接套模版 改insert方法,维护 ...

  8. vue-cli#2.0项目结构分析

    项目结构 build 构建工具相关的目录 config 配置目录 dist 通过工具打包生成的最终需要上线的目录 node_modules 存放本地开发所有的依赖包的目录 src 源码目录 stati ...

  9. 洛谷 P1403 [AHOI2005]约数研究

    怎么会有这么水的省选题 一定是个签到题. 好歹它也是个省选题,独立做出要纪念一下 很容易发现在1~n中,i的因子数是n / i 那就枚举每一个i然后加起来就OK了 #include<cstdio ...

  10. 从头认识java-17.2 线程中断(interrupt)

    这一章节我们来讨论一下线程中断(interrupt). 1.什么是线程中断(interrupt)? 就是在多线程执行的时候,我们给线程贴上一个中断的标记.可是不要求线程终止. 2.样例: 中断的样例: ...