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. zzulioj--1790-- 弹珠游戏(数学水题!)

    弹珠游戏 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 14  Solved: 10 SubmitStatusWeb Board Descriptio ...

  2. hdoj--4857--逃生(拓扑排序+反向建图)

    逃生 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  3. 将hexo的评论系统由gitment改为Valine

    title: 将hexo的评论系统由gitment改为Valine toc: false date: 2018-09-13 15:10:56 categories: methods tags: hex ...

  4. js调节图片的亮度

    js调节图片的亮度:(使用CSS3的滤镜) 1.实现点亮图标.熄灭图标的效果 效果图: 页面代码: <!DOCTYPE html> <%@ page language="j ...

  5. jqGrid冻结列

    jqgrid冻结列 冻结列:就是横向移动表格时,让某一列保持不动 做法: 1.colModel的行要加上属性: frozen:true.注意:冻结列必须从第一列开始,包括隐藏列 2.加载jqgrid后 ...

  6. word2tex之类的问题

    首先就是这个word2tex一般是在word和tex文本互相转换的时候用的. 以前win7下用的chikrii忘了使用方法.. 之后再win10下用的excel2tex,但是转换时候总感觉不如word ...

  7. 「JavaSE 重新出发」01. Java介绍

    「白皮书」关键术语 简单性(C++--) 面向对象 分布式 健壮性 安全性 体系结构中立 可移植性 解释型 高性能 多线程 动态性 Java 发展历程 SUN公司--Stanford Universi ...

  8. Jlink如何校验Hex

    打开SEGGER J-Flash ARM,记住必须设置好工程属性后才能校验,否则校验和为0 设置好工程属性后,直接将Hex拖入到工程中即可.在LOG窗口中会显示CRC的值 如何校验芯片中的程序的版本号 ...

  9. swift语言点评十五-$0

    import UIKitimport XCPlayground class ViewController: UIViewController { func action() { print(" ...

  10. SpringBoot学习笔记(12)----SpringBoot实现多个 账号轮询发送邮件

    首先,引入发送邮件的依赖,由于freemarker自定义模板,所以也需要把freemarker的依赖引入 pom.xml文件 <dependency> <groupId>org ...