-
Shell脚本中的函数php
-
函数就是把一段代码整理到一个小单元中,并给这个单元起一个名字,当用到这段代码是直接调用这个单元的名字便可。mysql
-
格式:function f_name(){sql
-
Commandshell
-
}数组
-
函数必需要放在最前面bash
-
示例1服务器
-
#!/bin/bashdom
-
function input() {socket
-
#function能够省略函数
-
echo $1 $2 $# $0
-
}
-
input 1 a b
-
示例2(算出数字的和)
-
#!/bin/bash
-
sum() {
-
s=$[$1+$2]
-
echo $s
-
}
-
sum 1 2
-
示例3
-
#!/bin/bash(显示ip)
-
ip() {
-
ifconfig |gerp -A1 “$1” |tail -1 |awk ‘{print $2}’|awk -F’:’ ‘{print $2}’
-
}
-
read -p “please input the eth name:” e
-
myip=’ip $e’
-
echo “$e address is $myip”
-
Shell中的数组
-
定义数组a=(1 2 3 4 5);echo ${a[@]}
-
echo ${#a[@]}获取数组的元素个数。
-
echo ${a[2]}读取第三个元素,数组从0开始。
-
echo ${a[*]}等同于${a[@]}显示整个数组。
-
数组赋值:
-
a[1]=100;echo ${a[@]}
-
a[5]=2;echo ${a[@]}若是下标不存在则会制动添加一个元素。
-
数组的删除:
-
user a;unset a [1]
-
数组分片:
-
a=(‘seq 1 5’)
-
echo ${a[@]:0:3}从第一个元素开始,截取3个。
-
echo ${a[@]:1:4}从第二个元素开始,截取4个。
-
echo ${a[@]:0-3:2}从倒数第3个元素开始,截取2个。
-
数组替换:
-
echo ${a[@]/3/100}
-
a=(${a[@]/3/100})
-
告警系统需求分析
-
需求:使用shell定制各类个性化告警工具,但须要统一化管理、规范化管理。
-
思路:指定一个脚本包,包含主程序、子程序、配置文件、邮件引擎、输出日志等。
-
主程序:做为整个脚本的入口,是整个系统的命脉。
-
配置文件:是一个控制中心,用它来开关各个子程序,指定各个相关联的日志文件。
-
子程序:这个才是真正的监控脚本,用来监控各个指标。
-
邮件引擎:使用一个Python程序来实现,它能够定义发邮件的服务器、发邮件人以及发件人密码。
-
输出日志:整个监控系统要有日志输出。
-
Shell项目-告警系统main.sh
-
#!/bin/bash
-
#written by aming
-
#是否发送邮件的开关
-
export send=1
-
#过滤ip地址
-
export addr=’/sbin/ifconfig |grep -A1 ‘eth0’ |awk ‘/inet/ {print $2}’’
-
#eth0根据你要上报的ip更改网卡
-
dir=’pwd’
-
#只须要最后一级目录名
-
last_dir=’echo $dir|awk -F’/’ ‘{print $NF}’’
-
#下面的判断目的是,保证执行脚本的时候,咱们在bin目录里,否则监控脚本、邮件和日志颇有可能找不到。
-
if [ $last_dir == “bin” ] || [ $last_dir == “bin/” ]; then
-
conf_file=”../conf/mon.conf”
-
else
-
echo “you shoud cd bin dir”
-
exit
-
fi
-
exec 1>>../log/mon.log 2>>../log/err.log
-
echo “’date + “%F %T”’ load average”
-
/bin/bash ../shares/load.sh
-
#先检查配置文件中是否须要监控502
-
if grep -q ‘to_mom_502=1’ $conf_file; then
-
export log=’grep ‘logfile=’ $conf_file |awk -F ‘=’ ‘{print $2}’ |sed ‘s/ //g’’
-
/bin/bash ../shares/502.sh
-
fi
-
Shell项目-告警系统配置文件
-
mon.conf内容
-
##to config the optinons fi to monitor
-
##定义mysql的服务器地址、端口一级user、password
-
to mon_cdb=0
-
##0 or 1, default 0,0 not monitor,1 monitor
-
db_ip=10.20.3.13
-
db_port=3315
-
db_user=username
-
db_pass=passwd
-
##httpd 若是是1则监控,为0则不监控
-
to_mon_httpd=0
-
##php 若是是1则监控,为0则不监控
-
to_mon_php_socket=0
-
##http_code_502 须要定义访问日志的路径
-
to_mon_502=1
-
logfile=/data/log/xxx.xxx.com/access.log
-
##request_count 定义日志路径以及域名
-
to_mon_request_count=0
-
req_log=/data/log/www.discuz.net/access.log
-
domainname=www.discuz.net
-
shell项目-告警系统load.sh
-
#!/bin/bash
-
##writen by aming##
-
load=’uptime |awk -F ‘average:’ ‘{print $2}’ |cut -d’.’ -f1|sed ‘s/ //g’ |cut -d. f1’
-
if [ $load -gt 10 ] && [$send -eq “1” ]
-
then
-
echo “addr ‘date +%T’ load is $load” >../log/load.tmp
-
/bin/bash ../mail/mail.sh $addr_load $load ../log/load.tmp
-
fi
-
echo “’date +%T’ load is $load”
-
Shell项目-告警系统502.sh
-
502.sh内容
-
#!/bin/bash
-
d=’date -d “-1 min” +%H:%M’
-
c_502=’grep :$d: $log |grep ‘502’|wc -l’
-
if [ $c_502 -gt 10 ] && [ $send == 1 ]; then
-
echo “$addr $d 502 count is $c_502”>../log/502.tmp
-
/bin/bash ../mail/mail.sh $addr_502 $c_502 ../log/502.tmp
-
fi
-
echo “’date +%T’ 502 $c_502”
-
Shell项目-告警系统disk.sh
-
#!/bin/bash
-
##writen by aming##
-
rm -f ../log/disk.tmp
-
for r in ‘df -h |awk -F ‘[ %]+’ ‘{print $5}’|grep -v Use’
-
do
-
if [ $r -gt 90 ] && [ $send -eq “1” ]
-
then
-
echo “$addr ‘date +%T’ disk useage is $r” >>../log/disk.tmp
-
fi
-
if [ -f ../log/disk.tmp ]
-
then
-
df -h >> ../log/disk.tmp
-
/bin/bash ../mail/mail.sh $addr_disk $r ../log/disk.tmp
-
echo “’date +%T’ disk useage is nook”
-
else
-
echo “’date +%T’ disk useage is ok”
-
fi
-
Shell项目-告警系统mail.sh
-
log=$1
-
t_s=’date +%s’
-
t_s2=’date -d “2 hours ago” +%s’
-
if [ 1 -f /tmp/$log ]
-
then
-
echo $t_s2 > /tmp/$log
-
fi
-
t_s2=’tail -1 /tmp/$log |awk ‘{print $1}’’
-
echo $t_s>>/tmp/$log
-
v=$[$t_s-$t_s2]
-
echo $v
-
if [ $v -gt 3600 ]
-
then
-
./mail.py $1 $2 $3
-
echo “0” > /tmp/$log.txt
-
else
-
if [ ! -f /tmp/$log.txt
-
then
-
echo “0” > /tmp/$log.txt
-
fi
-
nu=’cat /tmp/$log.txt’
-
nu2=$[$nu+1]
-
echo $nu2>/tmp/$log.txt
-
if [ $nu2 -gt 10 ]
-
then
-
./mail.py $1 “trouble continue 10 min $2 ” “$3”
-
echo “0” > /tmp/$log.txt
-
fi
-
fi
-
运行告警系统
-
cd /usr/local/sbin/mon/bin
-
bash main.sh