-
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