shell-腳本集合
shell-腳本集合2
監控之檢查磁碟
- $ cat chk_df.sh
- #!/bin/bash
- #
- #check the disk usage via ssh
- #variables
- let dflimit=90
- crondir="crontab"
- source CONFIG
- #main
- #執行ssh 命令
- for HOST in $ALLHOSTS ;do
- flag_disk_file=$crondir/log/"$HOST".disk
- log=$crondir/log/disk_error.log
- capacity=$(ssh root@$HOST "df" | grep "/dev/" | sed 's/\%//' | awk '{print $5}')
- let flags=0
- #判斷ssh命令返回結果
- for used in $capacity ;do
- if [ $used -ge $dflimit ];then
- let flags=1
- break
- fi
- done
- #如果磁碟超過限制,則發送報警郵件
- if [ "$flags" -eq "1" -a ! -f "$flag_disk_file" ];then
- #for mobile in "$MOBILES";do
- #echo "$HOST disk will full" | /usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode
- #done
- echo "$HOST disk will full" | mail -s "$HOST disk will full" $MAILS
- date '%F %T' >>$log
- echo "$HOST disk will full" >> $log
- echo "disk_error" >$flag_disk_file
- fi
- #如果磁碟正常,則發郵件解除報警郵件
- if [ "$flags" -eq "0" -a -f "$flag_disk_file" ];then
- for mobile in "$MOBILES";do
- echo "$HOST disk ok"|/usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode
- done
- echo "$HOST disk ok" | mail -s "$HOST disk ok" $MAILS
- date '%F %T' >>$log
- echo "$HOST disk ok" >> $log
- rm -f $flag_disk_file
- fi
- done
監控之檢查系統負載
- $ cat chk_load.sh
- #!/bin/bash
- #
- #check the system load through ssh
- #variables
- let loadlimit=3
- sh_dir=/root/sh/
- crondir=${sh_dir}crontab
- log=${crondir}/log/system_load.log
- source ${sh_dir}/CONFIG
- #main
- #執行ssh 命令
- for HOST in $ALLHOSTS ;do
- LOAD=$(ssh root@$HOST "/bin/cat /proc/loadavg" | awk '{print $1}' | awk -F. '{print $1}')
- if [ -z "$LOAD" ];then
- echo "$HOST is null"
- continue
- fi
- #判斷ssh命令返回結果
- if [ "$LOAD" -lt "$loadlimit" ];then
- #echo "$HOST load is OK!"
- #如果找到load文件,則發送解除報警郵件
- if [ -f $crondir/log/"$HOST".load ];then
- #for mobile in $MOBILES;do
- # echo "$HOST load ok"|/usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode
- #done
- echo "$HOST load ok" | mail -s "$HOST load ok" $MAILS
- #刪除load文件
- rm -f $crondir/log/"$HOST".load
- date '%F %T' >>$log
- echo "$HOST load ok" >> $log
- fi
- else
- #echo "$HOST is overload!"
- #不能找到load文件,則發送報警郵件
- if [ ! -f $crondir/log/"$HOST".load ];then
- #for mobile in $MOBILES;do
- # echo ""$HOST" overload"|/usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode
- #done
- echo "$HOST overload" | mail -s "$HOST overload" $MAILS
- #生成load文件
- echo "overload" >$crondir/log/"$HOST".load
- date '%F %T' >>$log
- echo "$HOST overload" >> $log
- fi
- fi
- done
監控之檢查網路(ping)
- $ cat chk_ping.sh
- #!/bin/bash
- #
- #Use the ping command to check network
- #
- #$ ping -f -c 10 10.0.100.1
- #PING 10.0.100.1 (10.0.100.1) 56(84) bytes of data.
- #.........E
- #--- 10.0.100.1 ping statistics ---
- #10 packets transmitted, 0 received, 3 errors, 100% packet loss, time 120ms
- #, pipe 3
- #$ ping -f -c 10 10.0.100.71
- #PING 10.0.100.71 (10.0.100.71) 56(84) bytes of data.
- #
- #--- 10.0.100.71 ping statistics ---
- #10 packets transmitted, 10 received, 0% packet loss, time 0ms
- #rtt min/avg/max/mdev = 0.003/0.009/0.056/0.015 ms, ipg/ewma 0.029/0.019 ms
- #
- #$ echo $?
- #1 #返回值1
- #
- #variables
- sh_dir=/root/sh/
- crondir =${sh_dir}crontab
- source ${sh_dir}/CONFIG
- DELAY_LIMIT=100
- LOSS_LIMIT=20
- HOSTS="$ALLHOSTS $WEBHOSTS"
- #main
- #每個ip
- for HOST in $HOSTS ;do
- flag_ping_file="$crondir/log/$HOST.ping"
- flag_ping_fatal="$crondir/log/$HOST.ping.fatal"
- error_log="$crondir/log/ping_error.log"
- #返回值0,定義delay 與 loss 變數
- if ping -f -c 50 $HOST >$crondir/log/ping.log;then
- grep "rtt min" $crondir/log/ping.log >$crondir/log/ping.delay
- grep "packet loss" $crondir/log/ping.log >$crondir/log/ping.loss
- delay=`awk -F= '{print $2}' $crondir/log/ping.delay | awk -F/ '{print $2}'| awk -F. '{print $1}'`
- loss=`awk '{print $6}' $crondir/log/ping.loss | awk -F% '{print $1}'`
- #判斷delay 或者loss 大於規定限制,則發送報警郵件
- if [ "$delay" -ge "$DELAY_LIMIT" -o "$loss" -ge "$LOSS_LIMIT" ];then
- if [ ! -f $flag_ping_file ];then
- #for mobile in $MOBILES;do
- #echo "Monitor to $HOST delay $delay'ms;$loss% packet loss" | /usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode
- #done
- echo "Monitor to $HOST delay $delay'ms;$loss% packet loss" | mail -s "Monitor to $HOST delay $delay'ms;$loss% packet loss" $MAILS
- date '%F %T' >>$error_log
- cat $crondir/log/ping.log >>$error_log
- #生成用於判斷的flag文件
- echo "$HOST network error" >$flag_ping_file
- fi
- fi
- #判斷delay 或者loss 小於規定限制,則發送解除報警郵件
- if [ "$delay" -lt "$DELAY_LIMIT" -a "$loss" -lt "$LOSS_LIMIT" -a -f $flag_ping_file ];then
- echo "$HOST network ok" | mail -s "$HOST network ok" $MAILS
- rm -f $flag_ping_file
- if [ -f $flag_ping_fatal ];then
- #for mobile in $MOBILES;do
- #echo "$HOST network ok"|/usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode
- #done
- #刪除用於判斷的flag文件
- rm -f $flag_ping_fatal
- fi
- fi
- #
- else
- #返回值1,則直接判斷為失敗,發送報警郵件
- if [ ! -f $flag_ping_fatal ];then
- #for mobile in $MOBILES;do
- #echo "Monitor to $HOST fatal;100% packet loss" | /usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode
- #done
- echo "Monitor to $HOST fatal;100% packet loss" | mail -s "Monitor to $HOST fatal;100% packet loss" $MAILS
- date '%F %T' >>$error_log
- cat $crondir/log/ping.log >>$error_log
- echo "$HOST network fatal" >$flag_ping_fatal
- echo "$HOST network error" >$flag_ping_file
- fi
- fi
- done
監控之檢查mysql 主從狀態
- $ cat chk_mysql_replicate.sh
- #!/bin/bash
- #
- #check the mysql replicate
- #
- #/usr/local/mysql/bin/mysql -uroot -pdongnan -e 'show slave status\G' -ss | awk '{print $2}' | head -n 13 | tail -n2
- #Yes
- #Yes
- #
- #
- #variables
- let dflimit=90
- sh_dir=/root/sh/
- crondir=${sh_dir}crontab
- source ${sh_dir}/CONFIG
- HOSTS="$DB_SLAVE_HOSTS"
- #main
- for HOST in $HOSTS;do
- ssh root@$HOST "/usr/local/mysql/bin/mysql -uroot -pdongnan -e 'show slave status\G' -ss" | awk '{print $2}' | head -n 13 | tail -n2 >"${crondir}/log/chk_mysql_replicate.log"
- YN=""
- #
- while read line;do
- YN="$YN $line"
- #donevar /crontab/log/chk_mysql_replicate.log
- done < "${crondir}/log/chk_mysql_replicate.log"
- #
- if [ "$YN" == " Yes Yes" ];then
- echo "$HOST Slave is running!"
- if [ -f "${crondir}/log/$HOST.mysql" ];then
- #for mobile in $MOBILES;do
- #echo ""$HOST"."$i" replicate ok" | /usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode
- #done
- echo "$HOST replicate ok" | mail -s "$HOST replicate ok" $MAILS
- rm -f "${crondir}/log/$HOST.mysql"
- fi
- #
- else
- echo "$HOST Slave is not running!"
- if [ ! -f "${crondir}/log/$HOST.mysql" ];then
- #for mobile in $MOBILES;do
- #echo ""$HOST"."$i" replicate error" | /usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode
- #done
- echo "$HOST replicate error" | mail -s "$HOST replicate error" $MAILS
- echo "replicate error" >"${crondir}/log/$HOST.mysql"
- fi
- fi
- #
- done
# Nginx 分割日誌腳本
- $ cat nginx_log.sh
- #!/bin/bash
- #split log
- #
- #Nginx
- #Signal Action
- #TERM, INT Terminate the server immediately
- #QUIT Stop the server
- #HUP Configuration changes, start new workers, graceful stop of old workers
- #USR1 Reopen log files
- #USR2 Upgrade the server executable
- #WINCH Graceful Stop (parent process advise the children to exit)
- #variables
- log_dir=/data/logs/yum/
- log_date=$(date '%F')
- nginx_pid=/usr/local/nginx/logs/nginx.pid
- keep_days=30
- #old_log
- find "$log_dir" -name "*\.log" -type f -mtime ${keep_days} -exec rm -rf {} \;
- #new_log
- if [ -e ${log_dir}access-${log_date}.log ];then
- echo "Already exists" && exit 1
- else
- /bin/mv ${log_dir}access.log ${log_dir}access-${log_date}.log && /bin/kill -USR1 $(cat $nginx_pid)
- fi
# php 文件發布腳本
- cat rsync_www.sh
- #!/bin/bash
- #
- #/usr/bin/rsync -avz --password-file=/root/rsync_pw /var/www/test/test rsync@10.0.100.82::www/test
- #echo "rsync_password" > rsync_pw && chmod 600 rsync_pw
- #variables
- #HOSTS="10.0.100.82 10.0.100.81 10.0.100.83"
- HOSTS="10.0.100.82"
- MOD=www
- MAILADD="root@localhost"
- DATE=`date %F_%T`
- src_dir=/var/www/html/
- rsync_pw=/root/sh/rsync_pw
- rsync_user=dongnan
- rsync_file_dir=/var/www/rsync/
- log_dir =/var/www/rsync/log/
- regular_replace=/data/
- #USERNAME=`logname`
- if [ -n "$SUDO_USER" ];then
- USERNAME=`echo $SUDO_USER`
- else
- USERNAME="root"
- fi
- #function
- rsync_www(){
- for host in $HOSTS;do
- #if /usr/bin/rsync -avz ${src_dir}$1 $host::${MOD}/$1;then
- if /usr/bin/rsync -avz --password-file="$rsync_pw" ${src_dir}$1 ${rsync_user}@${host}::${MOD}/$1;then
- echo "$DATE ${src_dir}$1 rsync to $host ok by $USERNAME" >> ${log_dir}rsync.ok
- else
- echo "$DATE ${src_dir}$1 rsync to $host error by $USERNAME" >> ${log_dir}rsync.error
- echo "$DATE ${src_dir}$1 rsync to $host error by $USERNAME."| mail -s "rsync error" $MAILADD
- fi
- done
- }
- #main
- #刪除空白或空行
- sed -ri 's/^[ \t] //g;/^$/d' ${rsync_file_dir}rsync_file.list
- #
- sed -e 's#/var/www/html/##g' ${rsync_file_dir}rsync_file.list > ${log_dir}rsync.tmp
- while read line;do
- if [ ! -d "$src_dir$line" -a ! -f "$src_dir$line" ];then
- echo "$DATE ${src_dir}$line is't existence by $USERNAME!!!" | tee -a ${log_dir}rsync.error | mail -s "rsync error" $MAILADD
- else
- rsync_www $line
- fi
- done < ${log_dir}rsync.tmp
#
#
[火星人 ] shell-腳本集合2已經有1080次圍觀