shell是运维人员应该具备的基本技能一,熟练掌握及运用shell,对提升运维作业效率与质量有很大帮助。在这里,将会结合工作中各种场景,利用shell脚本解决问题,完成目标。
监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员。
a. 开发一个守护进程脚本每30秒实现检测一次。
b. 如果同步出现如下错误号(1158,1159,1008,1007,1062),则跳过错误。
c. 请使用数组技术实现上述脚本(获取主从判断及错误号部分)。#!/bin/bash mysqlbin=/usr/bin/mysql mysqlhost=127.0.0.1 mysqluser=root mysqlpwd=root skiperrors=(1158 1159 1008 1007 1062) admin='email@qq.com' check() { LASTNO=$($mysqlbin -h$mysqluser -u$mysqluser -p$mysqlpwd -e "show slave status\G"|grep Last_Errno|awk -F: '{print $2}') } skip() { for errorno in ${skiperrors[@]};do if [ $errorno == $LASTNO ];then notify $errorno break fi done } notify() { text="mysql slave monitor error: $1" echo $text|mail -s 'mysql error' } main() { while :;do check && skip || notify "mysql connected failed!" sleep 30 done } main
使用for循环在目录下通过随机小写10个字母加固定字符串file批量创建10个。
#!/bin/bash gen_num() { local n min=$1 max=$(($2-$min+1)) n=$(($RANDOM+1000000000)) echo $(($n%$max+$min)) } gen_randletters() { local l local n #raw=(a b c d e f g h i g k l m n o p q r s t u v w x y z) raw=({a..z}) l=$1 for ((i=1;i<=$l;i++));do n=$(gen_num 0 26) letters+=${raw[$n]} done echo $letters } gen_randnames() { suffix=_file local l local n n=$1 l=$2 for ((i=