shell-脚本集合

shell-脚本集合2

 

1 web server status

 
  
  1. #!/bin/bash 
  2. #test web server http status 
  3. #20111011 by dongnan 
  4.  
  5. for i in $(cat test);do 
  6.    #echo $i 
  7.    if curl -IL -m 2 $i 2>&1 | grep '200 OK' > /dev/null ;then 
  8.       echo "$i status is 200" 
  9.    elif curl -IL -m 2 $i 2>&1 | grep '403 Forbidden' > /dev/null ;then  
  10.       echo "$i status is 403" 
  11.    else 
  12.       echo "$i is bad" 
  13.    fi   
  14. done 
 
  
  1. #./domain.sh 
  2. www.aa.com status is 200 
  3. www.gunduzi.sb is bad 
  4. www.sx.sb is bad 

 2 test url 502

 
  
  1. #!/bin/bash 
  2. #20111015 by dongnan
  3. #test the url 502 
  4.  
  5. for((i=1;i<=50;i++));do  
  6.     if curl -LI http://www.a.com/set.php?id=123456 2>&1 | grep '502' > /dev/null ;then 
  7.         echo "echo $i 502" 
  8.     fi   
  9.     sleep 1; 
  10. done 

 3 test cdn ip loop

 
  
  1. #!/bin/bash 
  2. #20111101 by dongnan 
  3. #test the cdn ip loop 
  4.  
  5.  
  6. for((i=1;i<=60;i++));do 
  7.     ping -c 1  *.cdns.com | grep -v PING | grep -i 'from' | awk '{print $4}' | sed -r 's/(:)|(\-BJ\-CNC)//g' 
  8. done 

测试

 
  
  1. ./cdn-loop.sh | sort | uniq -c 
  2.      20 123.1.1.1 
  3.      20 123.1.2.2 
  4.      20 21.1.3.3 

 4 测试 apache vhost

 
  
  1. grep -vE '^#|^[ \t].&#' httpd-vhosts.conf | grep ServerName | awk '{print $2}' >> bbs_vhost.txt
  2. while read line;do dig $line | grep -E 'IN.*A|IN.*CNAME'|grep -v '^;';done < bbs_vhost.txt 
  3.  
  4. bbs.a.com.      956 IN  A   *.*.*.* 
  5. msn.bbs.a.com.  807 IN  CNAME   bbs.a.com. 
  6. bbs.a.com.      956 IN  A   *.*.*.* 
  7. bbsimg.a.com.   1460    IN  A   *.*.*.* 
  8. pq.a.com.       861 IN  A   *.*.*.* 
  9. wenda.a.com.        1794    IN  A   *.*.*.* 

 5 批量上传ssh id_rsa.pub 公匙

自动: 需要使用 expect 命令

 
  
  1. cat auto_ssh_key.sh
  2. #!/bin/bash 
  3. #auto ssh key 
  4. #20111125 by dongnan
  5.  
  6. #variables 
  7. hosts='2 3 4 5 6 7 8 9' 
  8. ip=10.100.100. 
  9. user=dn 
  10. password=mima 
  11.  
  12. #function 
  13. 参考
  14. auto_ssh_copy_id () { 
  15. expect -c "set timeout -1; 
  16. spawn ssh-copy-id -i /home/dn/.ssh/id_rsa.pub $1; 
  17. expect { 
  18. *(yes/no)* {send -- yes\r;exp_continue;} 
  19. *assword:* {send -- $2\r;exp_continue;} 
  20. eof        {exit 0;} 
  21. }"; 
  22.  
  23. for i in $hosts;do 
  24.     echo "${ip}$i" 
  25. #    cat ~/.ssh/id_rsa.pub | ssh dn@${ip}$i "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat - >~/.ssh/authorized_keys && chmod 644 ~/.ssh/authorized_keys" 
  26.     auto_ssh_copy_id $user@${ip}$i $password 
  27. done 

 6 批量部署 .bash_profile ,前提需要 ssh通过私匙登陆ssh服务器

关于如何配置ssh key,请参考这里

 
  
  1. grep -E 'space.$|bbs.$' /etc/hosts | awk '{print $1}' > hosts 
  2.  
  3. while read line;do echo $line;scp ~/.bash_profile dn@${line}:/home/dn/;done < hosts 
  4.  10.100.100.2 
  5. .bash_profile                                 100%  622     0.6KB/s   00:00     
  6. 10.100.100.3 
  7. .bash_profile                                 100%  622     0.6KB/s   00:00     
  8. 10.100.100.4 
  9. .bash_profile                                 100%  622     0.6KB/s   00:00     
  10. ...... 

 7 stdin and while

 
  
  1. cat install.log  | while read line;do echo $line ; wc -c;done 
  2. while read line;do echo $line | wc -c;done < install.log 

 8 自定义.bash_profile 文件!

 
  
  1. #将以下行添加到.bash_profile
  2. ip=$(/sbin/ifconfig eth1 | grep Bcast | sed -e 's/^.* addr:\(.*\) Bcast.*$/\1/') 
  3.  
  4. if [ $ip ];then 
  5.     PS1="\[\e[32;1m\]$ip\[\e[0m\][\W]\$ " 
  6.     export PS1 
  7. fi 
  8.  
  9. echo "[LOAD]";cat /proc/loadavg;echo "[DISK]";df -Th 

 9 统计用户登陆次数与 ip 地址

 
  
  1. #!/bin/bash 
  2. #chek login user 
  3.  
  4. #variables 
  5. user=`id -u` 
  6.  
  7.  
  8. if [ $user -ne 0 ];then 
  9.     echo "must root !!" 
  10.     exit 1 
  11. fi 
  12.  
  13.  
  14. for i in `ls /var/log/secure*`;do 
  15.     echo "$i" 
  16.     #cat /var/log/secure | grep -i ' Accepted password' | awk '{print $9, $11}' | sort | uniq -c 
  17.     cat "$i" | grep -i ' Accepted password' | awk '{print $9, $11}' | sort | uniq -c 
  18. done

效果如下

 
  
  1. ./login.sh 
  2. /var/log/secure 
  3.       6 dn 100.100.100.99 
  4. /var/log/secure.1 
  5.      15 dn 100.100.100.99 

 10 统计bbs 文件夹大小,需要ssh-key 参考上面!

 
  
  1. #!/bin/bash 
  2. #du -sh 
  3.  
  4. #variables 
  5. ip=100.100.100. 
  6. #hosts='24' 
  7. hosts='22 23 24 25 26 27 28 29' 
  8.  
  9. for host in $hosts;do 
  10.    echo ${ip}$host 
  11.    ssh ${ip}$host "find /var/www/bbs/ -type d -name 'day*'  | xargs du -h | awk '{print \$1}'" 
  12.    ssh ${ip}$host "du -sh /var/www/bbs/"  
  13. done 

 #ssh 传递 awk 命令时 "$" 需要使用"\"转义字符,例如:

 
  
  1. ssh ${ip}$host "df -h | grep -E '^/dev.*(/|/usr|/var)$' | awk '{print \$5,\$6}'" 

#统计硬盘使用情况

 
  
  1. cat bbs_df.sh  
  2.  
  3. #!/bin/bash 
  4. #vdisk usage 
  5. #20111129 by dongnan 
  6.  
  7. #variables 
  8. ip=10.100.100. 
  9. #hosts='102' 
  10. hosts='102 103 104 105 106 107 108 109' 
  11.  
  12. for host in $hosts;do 
  13.    echo -en "${ip}$host " 
  14.    ssh ${ip}$host "df -h | grep -E '^/dev.*(/|/usr|/var)$' | awk '{print \$6,\$5}'"  
  15. done 

 11 haproxy 服务脚本

 
  
  1. # cat /usr/local/sbin/haproxy.sh  
  2. #!/bin/bash 
  3. #haproxy command  
  4. #ver:0.1bate 
  5. #20111129 by dongnan 
  6.  
  7. #/usr/local/haproxy/sbin/haproxy  
  8. #HA-Proxy version 1.4.18 2011/09/16 
  9. #Copyright 2000-2011 Willy Tarreau <w@1wt.eu> 
  10. #Usage : haproxy [-f <cfgfile>]* [ -vdVD ] [ -n <maxconn> ] [ -N <maxpconn> ] 
  11. #        [ -p <pidfile> ] [ -m <max megs> ] 
  12. #        -v displays version ; -vv shows known build options. 
  13. #        -d enters debug mode ; -db only disables background mode. 
  14. #        -V enters verbose mode (disables quiet mode) 
  15. #        -D goes daemon 
  16. #        -q quiet mode : don't display messages 
  17. #        -c check mode : only check config files and exit 
  18. #        -n sets the maximum total # of connections (2000) 
  19. #        -m limits the usable amount of memory (in MB) 
  20. #        -N sets the default, per-proxy maximum # of connections (2000) 
  21. #        -p writes pids of all children to this file 
  22. #        -de disables epoll() usage even when available 
  23. #        -ds disables speculative epoll() usage even when available 
  24. #        -dp disables poll() usage even when available 
  25. #        -sf/-st [pid ]* finishes/terminates old pids. Must be last arguments. 
  26.  
  27. #variables 
  28. haproxy_dir=/usr/local/haproxy/ 
  29. haproxy_conf=${haproxy_dir}haproxy.cfg 
  30. haproxy_pid=${haproxy_dir}logs/haproxy.pid 
  31. haproxy_cmd=${haproxy_dir}sbin/haproxy 
  32. #test variables 
  33. #file $haproxy_dir; file $haproxy_conf; file $haproxy_cmd; file $haproxy_pid 
  34.  
  35.  
  36.  
  37. if [ "$#" -eq "0" ];then 
  38.     echo "usage: $0 {start|stop|restart}" 
  39.     exit 1 
  40. fi 
  41.  
  42. if [ "$1" = "start" ];then 
  43. #echo $1 
  44.     $haproxy_cmd -f $haproxy_conf 
  45. elif [ "$1" = "stop" ];then 
  46. #echo $1 
  47.     kill `cat $haproxy_pid` 
  48. elif [ "$1" = "restart" ];then 
  49. #echo $1 
  50.     $haproxy_cmd -f $haproxy_conf -st `cat $haproxy_pid` 
  51.  
  52. else 
  53.    echo "usage: $0 arguments only start and stop or restart !" 
  54. fi 

12 cpu load 测试

 
  
  1. $ cat load.sh
  2.  
  3. #! /bin/sh 
  4. # filename killcpu.sh 
  5. for i in `seq $1` 
  6. do 
  7.   echo -ne " 
  8. i=0
  9. while true 
  10. do 
  11. ii=i+1; 
  12. done" | /bin/sh & 
  13.   pid_array[$i]=$! ; 
  14. done 
  15. for i in "${pid_array[@]}"; do 
  16.   echo 'kill ' $i ';'; 
  17. done 
  18.  
  19. 使用方法很简单,参数3表示消耗3颗CPU的资源,运行后,会有一堆 kill 命令,方便 kill 进程: 
  20. [root@test02 ~]# ./killcpu.sh 3 
  21. kill  30104 ; 
  22. kill  30106 ; 
  23. kill  30108 ; 

 13 haproxy 安装脚本

 
  
  1. cat haproxy_install.sh
  2.  
  3. #!/bin/bash 
  4. #install haproxy  
  5. #20111207 by dongnan 
  6.  
  7. #variables 
  8. dir=/usr/local 
  9. ha_dir=${dir}/haproxy 
  10. ha_cfg=${ha_dir}/haproxy.cfg 
  11. kernel=`uname -r | grep '2.6'` 
  12. pcre=$(rpm -qa | grep 'pcre' | wc -l) 
  13. echo "$dir, $ha_dir, $ha_cfg, $kernel, $pcre" 
  14.  
  15.  
  16. #check 
  17. if [ ! "$kernel" -o "$pcre" -lt "2" ];then 
  18.     echo -e "the script need linux 2.6 kernel and pcre pcre-devel \nyou can usage 'yum install pcre pcre-devel' or 'rpm -ivh pcre-devel-6.6-2.el5_1.7.x86_64.rpm'" 
  19.     exit 1 
  20. fi 
  21.  
  22. #function 
  23.  
  24. install_ha_cfg (){ 
  25. #configure haproxy.cfg 
  26. #default configure file for test,but need your change the frontend server and backend server ip address, 
  27. #good luck! 
  28.  
  29. echo ' 
  30. global 
  31.     log 127.0.0.1   local0 
  32.     maxconn 4096              #最大连接数 
  33.     chroot /usr/local/haproxy #安装目录 
  34.     uid 99                    #用户haproxy 
  35.     gid 99                    #组haproxy 
  36.     daemon                    #守护进程运行 
  37.     nbproc 1                  #进程数量 
  38.     pidfile /usr/local/haproxy/logs/haproxy.pid #haproxy pid 
  39.  
  40. defaults 
  41.    log     global 
  42.    mode    http               #7层 http;4层tcp  
  43.    option  httplog            #http 日志格式 
  44.    option  httpclose          #主动关闭http通道 
  45.    option  redispatch         #serverId对应的服务器挂掉后,强制定向到其他健康的服务器 
  46.  
  47.    option  dontlognull 
  48.    maxconn 2000               #最大连接数 
  49.    contimeout      5000       #连接超时(毫秒) 
  50.    clitimeout      50000      #客户端超时(毫秒) 
  51.    srvtimeout      50000      #服务器超时(毫秒) 
  52.   
  53. frontend haproxy_test         #定义前端服务器(haproxy) 
  54.         bind 10.0.1.251:80    #监听地址 
  55.         default_backend server_pool  #指定后端服务器群 
  56.         #errorfile 502 /usr/local/haproxy/html/maintain.html 
  57.         #errorfile 503 /usr/local/haproxy/html/maintain.html 
  58.         #errorfile 504 /usr/local/haproxy/html/maintain.html 
  59.   
  60. backend server_pool           #定义后端服务器群(web server/apache/nginx/iis..) 
  61.         mode http 
  62.         option  forwardfor    #后端服务器(apache/nginx/iis/*),从Http Header中获得客户端IP 
  63.         #balance roundrobin    #负载均衡的方式,轮询方式 
  64.         balance leastconn     #负载均衡的方式,最小连接 
  65.         cookie SERVERID       #插入serverid到cookie中,serverid后面可以定义 
  66.         option  httpchk HEAD /check.html #用来做健康检查html文档 
  67.         server server1 10.0.1.252:80 cookie server1 check inter 2000 rise 3 fall 3 weight 3 
  68.         server server2 10.0.1.253:80 cookie server2 check inter 2000 rise 3 fall 3 maxconn 120 weight 3 
  69.         server server3 10.0.1.254:80 cookie server3 check maxconn 90 rise 2 fall 3 weight 3 
  70. #服务器定义: 
  71. #cookie server1表示serverid为server1; 
  72. #check inter 2000 是检测心跳频率(check 默认 ); 
  73. #rise 3 表示 3次正确认为服务器可用; 
  74. #fall 3 表示 3次失败认为服务器不可用; 
  75. #weight 表示权重。 
  76.  
  77. listen admin_stat                   #status 
  78.     bind *:8080                     #监听端口 
  79.     mode http                       #http的7层模式 
  80.     stats refresh 30s               #统计页面自动刷新时间 
  81.     stats uri /haproxy-stats        #统计页面URL 
  82.     stats realm Haproxy\ Statistics #统计页面密码框上提示文本 
  83.     stats auth admin:admin          #统计页面用户名和密码设置 
  84.     stats hide-version              #隐藏统计页面上HAProxy的版本信息 
  85.     stats admin if TRUE             #手工启用/禁用,后端服务器 
  86. > "$ha_cfg" && sed -i '1 d' "$ha_cfg" 
  87.     
  88.  
  89. #install 
  90. if [ ! -e "$ha_dir" ];then 
  91.    tar zxf haproxy*.tar.gz 
  92.    cd haproxy*/ 
  93.    make TARGET=linux26 USE_STATIC_PCRE=1 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy && mkdir /usr/local/haproxy/{html,logs} 
  94.    cd ../ 
  95.    if [ ! -e "$ha_dir" ];then 
  96.        echo "error! can't install haproxy  please check ! Will now out of the script !" 
  97.        exit 1 
  98.    else 
  99.        ! grep 'haproxy' /etc/syslog.conf && echo 'local1.*            /var/log/haproxy.log' >> /etc/syslog.conf 
  100.        sed -ir 's/SYSLOGD_OPTIONS="-m 0"/SYSLOGD_OPTIONS="-r -m 0"/g' /etc/sysconfig/syslog && /etc/init.d/syslog restart 
  101.        install_ha_cfg 
  102.        rm -rf haproxy*/ 
  103.    fi 
  104. else 
  105.    echo "haproxy is already exists!" 
  106. fi 

 14 keepalived 安装脚本

 
  
  1. $ cat keepalived_install.sh 
  2.  
  3. #!/bin/bash 
  4. #install keepalived  
  5. #20111209 by dongnan 
  6.  
  7. #variables 
  8. keep_dir="/usr/local/keepalived/" 
  9. keep_conf="${keep_dir}keepalived.conf" 
  10. haproxy_dir="/usr/local/haproxy/" 
  11. #echo "$keep_dir $keep_conf $haproxy_dir" 
  12.  
  13.  
  14. #function 
  15. install_keepalived() { 
  16.  
  17. local keepalived_type=$1 
  18.  
  19. if [ ! -e "$keep_dir" ];then 
  20.     tar zxf keepalived*.tar.gz 
  21.     cd keepalived*/ 
  22.     ./configure --prefix=$keep_dir 
  23.     make && make install 
  24.     cd ../ 
  25.  
  26.     if [ ! -e "$keep_dir" ];then 
  27.         echo "error! can't install keepalived  please check ! Will now out of the script !" 
  28.         exit 1 
  29.     else 
  30.         if [ "$keepalived_type" = "master" ];then 
  31.             echo 'master' 
  32.             cat keepalived.conf | sed -r 's/state BACKUP/state MASTER/g;s/nopreempt/#/g' > "$keep_conf" 
  33.         elif [ "$keepalived_type" = "backup" ];then 
  34.             echo 'backup' 
  35.             cat keepalived.conf >  "$keep_conf" 
  36.         else 
  37.             echo 'backup-2' 
  38.             cat keepalived.conf | sed -r 's/priority 150/priority 100/g;s/nopreempt/#/g' > "$keep_conf" 
  39.         fi 
  40.         cp check_haproxy.sh "$keep_dir" 
  41.         rm -rf keepalived*/ 
  42.     fi 
  43.  
  44. else 
  45.     echo "keepalived is Already exists!" 
  46. fi 
  47.  
  48.  
  49. #main 
  50. case "$1" in 
  51.         master) 
  52.             install_keepalived $1 
  53.         ;; 
  54.     backup) 
  55.             install_keepalived $1 
  56.         ;; 
  57.     backup-2) 
  58.             install_keepalived $1 
  59.         ;; 
  60.     *) 
  61.         echo "Usage: $0 {master|backup|backup-2}" 
  62.             exit 1 
  63. esac 

15 keepalived 配置文档

 
  
  1. # cat cluster/keepalived.conf 
  2. global_defs { 
  3.  
  4. notification_email { 
  5. root@localhost 
  6. notification_mail_form root@localhost 
  7. smtp_server 127.0.0.1 
  8. smtp_connect_timeout 30 
  9.  
  10. router_id haproxy 
  11.  
  12. vrrp_sync_group VG1 { 
  13.  
  14. group { 
  15. VI_1 
  16.  
  17.  
  18.  
  19. vrrp_instance VI_1 { 
  20. state BACKUP 
  21. nopreempt 
  22. interface eth0 
  23.  
  24. track_interface { 
  25. eth0 
  26. eth1 
  27.  
  28. virtual_router_id 51 
  29. priority 150 
  30. advert_int 1 
  31.  
  32. authentication { 
  33. auth_type PASS 
  34. auth_pass 1111 
  35.  
  36.  
  37. virtual_ipaddress { 
  38. 192.168.57.77/24 dev eth0 scope global 
  39.  

 16 keepalived 服务脚本

 
  
  1. # cat /usr/local/sbin/keepalived.sh  
  2. #!/bin/bash 
  3. #keepalived  
  4. #ver:0.1bate 
  5. #20111211 by dongnan 
  6.  
  7. #variables  
  8. keep_dir="/usr/local/keepalived/" 
  9. keep_conf="${keep_dir}keepalived.conf" 
  10. keep_sbin="${keep_dir}sbin/keepalived" 
  11. haproxy_check="${keep_dir}haproxy_check.sh" 
  12. haproxy_ps=$(ps -C haproxy --no-header |wc -l) 
  13.  
  14. #main 
  15. case "$1" in 
  16.   start) 
  17.             if [ "$haproxy_ps" -ge "1" ];then 
  18.                 $keep_sbin -f $keep_conf &&  $haproxy_check start & 
  19.             else 
  20.                 echo "not found haproxy processes,please startup haproxy " 
  21.                 exit 1 
  22.             fi 
  23.               ;; 
  24.     stop) 
  25.             killall keepalived &&  $haproxy_check stop & 
  26.               ;; 
  27.     *) 
  28.         echo "Usage: $0 {start|stop}" 
  29.             exit 1 
  30.             ;; 
  31. esac 

17 安全设置脚本

18 “haproxy + keepalived 一键安装包”  脚本

 
  
  1. # cat 1key_install.sh  
  2. #!/bin/bash 
  3. #install haproxy and keepalived  
  4. #configure: /usrl/local/keepalived/keepalived.conf ; /usr/local/haproxy/haproxy.cfg  
  5. #sbin: /usr/local/sbin/keepalived.sh ; /usr/local/sbin/haproxy.sh  
  6. #haproxy_check.sh: /usr/local/keepalived/haproxy_check.sh 
  7. #startup: /etc/rc.local 
  8. #1key_install.sh ver 0.1 
  9. #20111218 by dongnan Email:dngood@sina.com 
  10.  
  11.  
  12. #variables  
  13. sbin_dir=/usr/local/sbin/ 
  14. keepalived_dir=/usr/local/keepalived/ 
  15. startup=/etc/rc.local 
  16.  
  17. #main 
  18. case "$1" in 
  19.     keepalived_type) 
  20.        bash ./haproxy_install.sh 
  21.        bash ./keepalived_install.sh "$2" 
  22.        ! ls "${sbin_dir}haproxy.sh" > /dev/null 2>&1 && cp ./haproxy.sh "$sbin_dir" 
  23.        ! ls "${sbin_dir}keepalived.sh" > /dev/null 2>&1 && cp ./keepalived.sh "$sbin_dir" 
  24.        ! ls "${keepalived_dir}haproxy_check.sh" > /dev/null 2>&1 && cp ./haproxy_check.sh "$keepalived_dir" 
  25.        chmod 700 "${keepalived_dir}haproxy_check.sh"  
  26.        ! grep  'haproxy.sh' "$startup" && echo  "${sbin_dir}haproxy.sh start" >> "$startup" 
  27.        ! grep  'keepalived.sh' "$startup" && echo  "${sbin_dir}keepalived.sh start" >> "$startup" 
  28.          ;; 
  29.     *)       
  30.        echo "Usage: $0 {keepalived_type backup}" 
  31.        echo "       keepalived_type:master|backup|backup-2" 
  32.        exit 1 
  33.        ;; 
  34. esac 

 19 haproxy 监控脚本

 
  
  1. # cat haproxy_check.sh  
  2. #!/bin/bash 
  3. #monitor haproxy 
  4. #haproxy_chekc.sh ver 0.3 bate 
  5. #20111218 by dongnan Email:dngood@sina.com 
  6. #0.3 bate版  
  7. #1 添加了简单容错功能,80端口故障后会再检查多次,如果故障次数超过规定的失败次数,则认定haproxy 失败,否则认定haproxy 正常;举个例子比如haproxy 并发比较大,没有向应监控脚本的请求,监控脚本记录失败次数1,依次执行10次,如果监控失败次数小于5(比如1次),则认为haproxy 正常,进入下次的监控,而不是像0.2版监控脚本一样,只要有一次80端口故障立马就切换了! 
  8. #2 为了方便keepalived.sh 调用此脚本,将脚本写成daemon形式可以设定监控脚本检查间隔时间(默认2s执行一次),不再需要依赖crontab来执行了,为方便调试脚本添加以启动和关闭监控脚本功能! 
  9.  
  10.  
  11. #variables  
  12. eth1_ip=$(/sbin/ifconfig eth1  | sed -n '/inet addr:/ s/inet addr://pg' | awk -F" " '{print $1}') 
  13. #eth0_ip=$(/sbin/ifconfig eth0  | sed -n '/inet addr:/ s/inet addr://pg' | awk -F" " '{print $1}') 
  14. eth1_url="http://${eth1_ip}:80" 
  15. #eth0_url="http://${eth0_ip}:80" 
  16. check_time=2         #检查间隔时间,2s 
  17. check_count=8        #故障后检查次数,8次 
  18. fault_count=4        #故障次数大于(4次),则认为不可用 
  19. keepalived_dir=/usr/local/keepalived/ 
  20. fault_log="${keepalived_dir}fault.log" 
  21.  
  22.  
  23. #function 
  24. check_haproxy(){ 
  25. pid_file="${keepalived_dir}haproxy_check.pid" 
  26. echo "$$" > "$pid_file" && echo `cat $pid_file` 
  27. keepalived=`ps -C keepalived --no-header |wc -l` 
  28.  
  29. while true;do 
  30. #检查时间,2s 
  31. sleep "$check_time"             # 
  32.  
  33. if curl -IL -A "haproxy_check" "$eth1_url" > /dev/null 2>&1 ;then 
  34. #if curl -IL -A "haproxy_check" "$eth0_url" > /dev/null 2>&1  &&  curl -IL -A "haproxy_check" "$eth1_url" > /dev/null 2>&1 ;then 
  35.    continue  
  36. else 
  37.     check_failed=0 
  38. #故障后检查次数,8次 
  39.     for((i=1;i<="$check_count";i++));do 
  40.  
  41.         check_date=$(date '+ %F_%T') 
  42.  
  43.         if ! curl -IL -A "haproxy_check" "$eth1_url" > /dev/null 2>&1 ;then 
  44.             failed_count=$((check_failed++)) 
  45.             sleep 1 
  46.         fi 
  47. #日志 
  48.         if [ "$keepalived" -ge "2" ];then 
  49.             echo -e "$check_date $eth1_url $check_failed \t fault" >> "$fault_log" 2>&1  
  50.         fi 
  51.     done 
  52. #检查失败次数大于故障次数,则停止keepalived 
  53.     if [ "$failed_count" -gt "$fault_count" ];then 
  54.          killall keepalived && /etc/init.d/network restart 
  55.          #mail -s 'haproxy and keepalived fault' root@localhost 
  56.          break 2 
  57.     fi 
  58. fi 
  59. done 
  60.  
  61. #main 
  62. case "$1" in 
  63.   start) 
  64.       check_haproxy 
  65.         ;; 
  66.     stop) 
  67.       #echo `cat $pid_file` 
  68.       kill `cat "${keepalived_dir}haproxy_check.pid"` 
  69.         ;; 
  70.     restart) 
  71.       echo "Sorry The next version will realize this function !!!" 
  72.         ;; 
  73.     *) 
  74.         echo "Usage: $0 {start|stop|restart}" 
  75.       exit 1 
  76.       ;; 
  77. esac 

 20 iptables 脚本

 
  
  1. $cat /root/sh/iptables.sh
  2. #!/bin/bash 
  3.  
  4. #Define variable 
  5. IPTABLES=/sbin/iptables 
  6. INTRANET="100.100.100.0/24" 
  7. Company="123.x.x.x" 
  8. Company1="202.x.x.x" 
  9. sy="119.x.x.x/27" 
  10. sj1="5x.x.x.x/26" 
  11. sj2="5x.x.x.x/28" 
  12. sj3="5x.x.x.x/28" 
  13.  
  14. $IPTABLES -F 
  15. $IPTABLES -X 
  16. $IPTABLES -P FORWARD DROP 
  17. $IPTABLES -P INPUT DROP 
  18.  
  19. echo "#Allow all at the loopback and INTRANET and shunyi sjhl" 
  20. $IPTABLES -A INPUT -i lo -j ACCEPT 
  21. $IPTABLES -A INPUT -s $INTRANET -j ACCEPT 
  22. $IPTABLES -A INPUT -s $sy -j ACCEPT 
  23. $IPTABLES -A INPUT -s $sj1 -j ACCEPT 
  24. $IPTABLES -A INPUT -s $sj2 -j ACCEPT 
  25. $IPTABLES -A INPUT -s $sj3 -j ACCEPT 
  26. $IPTABLES -A INPUT -s $Company -j ACCEPT 
  27. $IPTABLES -A INPUT -s $Company1 -j ACCEPT 
  28.  
  29.  
  30. echo "#Accepting HTTP" 
  31. $IPTABLES -A INPUT -p tcp -s 0/0 --dport 80 -j ACCEPT 
  32.  
  33. echo "ALLOW PING" 
  34. #$IPTABLES -A INPUT -i eth0 -p icmp -j ACCEPT 
  35.  
  36. echo "#Allow alive conn" 
  37. $IPTABLES -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 

21

22

23 memcached 安装脚本

 
  
  1. $ cat mem/memcached_install.sh  
  2. #!/bin/bash 
  3. #install memcached 
  4. #ver: 0.1bate 
  5. #20111230 by dongnan 
  6.  
  7. #variables 
  8. dir="/usr/local/" 
  9. libevent_dir=${dir}libevent 
  10. memcached_dir=${dir}memcached 
  11. sbin_dir="${dir}sbin/" 
  12. #main 
  13.  
  14. #check libevent 
  15. if [ ! -d "$libevent_dir" ];then 
  16.      tar zxvf libevent*.tar.gz 
  17.      cd libevent*/ 
  18.      ./configure --prefix="$libevent_dir" 
  19.      make && make install  
  20.      cd ../ 
  21. sleep 2 
  22.  
  23.      if [ -d "$libevent_dir" ];then 
  24.          echo "libevent is ok" 
  25.          rm -rf libevent*/ 
  26.      else 
  27.          echo "error! can't install libevent please check ! Will now out of the script!" 
  28.          exit 1 
  29.      fi 
  30. else 
  31.     echo "libevent is already exists!" 
  32. fi 
  33.  
  34.  
  35. #memcached 
  36. if [ ! -d "$memcached_dir" ];then 
  37.      tar zxvf memcached*.tar.gz 
  38.      cd memcached*/ 
  39.      ./configure --prefix="$memcached_dir" --with-libevent="$libevent_dir" 
  40.      make && make install  
  41.      cd ../ 
  42. sleep 2 
  43.  
  44.      if [ -d "$memcached_dir" ];then 
  45.          echo "memcached is ok" 
  46.          rm -rf memcached*/ 
  47.          ! ls "${sbin_dir}memcached.sh" > /dev/null 2>&1 && cp ./memcached.sh "$sbin_dir" && chmod 700 "${sbin_dir}memcached.sh" 
  48.      else 
  49.          echo "error! can't install memcached please check ! Will now out of the script!" 
  50.          exit 1 
  51.      fi 
  52. else 
  53.     echo "memcached is already exists!" 
  54. fi 

 24 memcached 服务脚本

 
  
  1. $ cat mem/memcached.sh  
  2. #!/bin/bash 
  3. #memcached 
  4. #ver:0.1bate 
  5. #20111230 by dongnan 
  6.  
  7. #variables  
  8. mem_dir="/usr/local/memcached/" 
  9. mem_pid="/var/run/memcached.pid" 
  10. mem_sbin="${mem_dir}bin/memcached" 
  11. mem_size="64" 
  12. mem_ip=$(/sbin/ifconfig eth1  | sed -n '/inet addr:/ s/inet addr://pg' | awk -F" " '{print $1}') 
  13. mem_port="11211" 
  14. mem_max_con="10000" 
  15.  
  16. #main 
  17. case "$1" in 
  18.         start) 
  19.             $mem_sbin -d -u root -m "$mem_size" -l "$mem_ip" -p "$mem_port" -c "$mem_max_con" -P "$mem_pid" 
  20.               ;; 
  21.     stop) 
  22.             kill $(cat $mem_pid) 
  23.               ;; 
  24.     *) 
  25.         echo "Usage: $0 {start|stop}" 
  26.             exit 1 
  27.                   ;; 
  28. esac 

25# Nginx 分割日志脚本

 
  
  1. $ cat nginx_log.sh  
  2. #!/bin/bash 
  3. #split log 
  4.  
  5. #Nginx  
  6. #Signal Action 
  7. #TERM, INT Terminate the server immediately 
  8. #QUIT Stop the server 
  9. #HUP Configuration changes, start new workers, graceful stop of old workers 
  10. #USR1 Reopen log files 
  11. #USR2 Upgrade the server executable 
  12. #WINCH Graceful Stop (parent process advise the children to exit) 
  13.  
  14.  
  15. #variables 
  16. log_dir=/data/logs/yum/ 
  17. log_date=$(date +'%F') 
  18. nginx_pid=/usr/local/nginx/logs/nginx.pid 
  19. keep_days=30 
  20.  
  21. #old_log     
  22. find "$log_dir" -name "*\.log" -type f -mtime +${keep_days} -exec rm -rf {} \; 
  23.  
  24. #new_log 
  25. if [ -e ${log_dir}access-${log_date}.log ];then 
  26.      echo "Already exists" && exit 1 
  27. else 
  28.     /bin/mv ${log_dir}access.log ${log_dir}access-${log_date}.log && /bin/kill -USR1 $(cat $nginx_pid) 
  29. fi 

26 # php 文件发布脚本

 
  
  1.  cat rsync_www.sh  
  2. #!/bin/bash 
  3. #/usr/bin/rsync -avz --password-file=/root/rsync_pw /var/www/test/test rsync@10.0.100.82::www/test 
  4. #echo "rsync_password" > rsync_pw && chmod 600 rsync_pw 
  5.  
  6. #variables 
  7. #HOSTS="10.0.100.82 10.0.100.81 10.0.100.83" 
  8. HOSTS="10.0.100.82" 
  9. MOD=www 
  10. MAILADD="root@localhost" 
  11. DATE=`date +%F_%T` 
  12. src_dir=/var/www/html/ 
  13. rsync_pw=/root/sh/rsync_pw 
  14. rsync_user=dongnan 
  15. rsync_file_dir=/var/www/rsync/ 
  16. log_dir=/var/www/rsync/log/ 
  17. regular_replace=/data/ 
  18.  
  19. #USERNAME=`logname` 
  20. if [ -n "$SUDO_USER" ];then 
  21. USERNAME=`echo $SUDO_USER` 
  22. else 
  23. USERNAME="root" 
  24. fi 
  25.  
  26. #function 
  27. rsync_www(){ 
  28. for host in $HOSTS;do 
  29.     #if /usr/bin/rsync -avz ${src_dir}$1 $host::${MOD}/$1;then 
  30.     if /usr/bin/rsync -avz --password-file="$rsync_pw" ${src_dir}$1 ${rsync_user}@${host}::${MOD}/$1;then 
  31.         echo "$DATE ${src_dir}$1 rsync to $host ok by $USERNAME" >> ${log_dir}rsync.ok 
  32.     else 
  33.         echo "$DATE ${src_dir}$1 rsync to $host error by $USERNAME" >> ${log_dir}rsync.error 
  34.         echo "$DATE ${src_dir}$1 rsync to $host error by $USERNAME."| mail -s "rsync error" $MAILADD 
  35.     fi 
  36. done 
  37.  
  38. #main 
  39. #删除空白或空行 
  40. sed -ri 's/^[ \t]+//g;/^$/d' ${rsync_file_dir}rsync_file.list 
  41. sed -e 's#/var/www/html/##g' ${rsync_file_dir}rsync_file.list > ${log_dir}rsync.tmp 
  42.  
  43. while read line;do 
  44.     if [ ! -d "$src_dir$line" -a ! -f "$src_dir$line" ];then 
  45.         echo "$DATE ${src_dir}$line is't existence by $USERNAME!!!" | tee -a ${log_dir}rsync.error | mail -s "rsync error" $MAILADD 
  46.     else 
  47.         rsync_www $line  
  48.     fi 
  49. done < ${log_dir}rsync.tmp 

 

27

28

29

30

31 cygwin 专用

 
  
  1. #!/bin/bash 
  2.  
  3. #variables 
  4. pid_dir=/var/run/ 
  5. rsync_pid=${pid_dir}rsync.pid 
  6. rsync_src_dir="/cygdrive/f/WebSite/brandimg /cygdrive/f/WebSite/fashion.yoka.com" 
  7. loop_time=600 
  8.  
  9. #function 
  10. #echo "$$" > "$rsync_pid" && cat "$rsync_pid" 
  11. rsync_start (){ 
  12. while true;do 
  13.     for src in $rsync_src_dir ;do 
  14.         ls $src 
  15.     done 
  16.     sleep "$loop_time" 
  17. done 
  18.  
  19. rsync_pid (){ 
  20. ps aux |awk '/(bash|sleep|sh)$/ {print$1,$3}'| awk 'NR>1&&$NF==var{print line "\n"$0}{line=$0;var=$NF}' | awk '{print $1}'> /var/run/rsync.pid 
  21.  
  22. rsync_stop (){ 
  23. while read line;do 
  24.     #kill "$line" 
  25.      echo "$line" 
  26. done < $rsync_pid 
  27.  
  28. #main 
  29. case "$1" in 
  30.     start) 
  31.     rsync_start & 
  32.     rsync_pid 
  33.     ;; 
  34.     stop) 
  35.     rsync_stop 
  36.     ;; 
  37.     *) 
  38.     echo "Usage: $0 {start|stop}" 
  39.     exit 1 
  40.     ;; 
  41. esac     

# seq 一例子

 
  
  1. #!/bin/bash 
  2. #usage seq of loop  
  3. #NAME 
  4. #       seq - print a sequence of numbers 
  5. #SYNOPSIS 
  6. #       seq [OPTION]... LAST 
  7. #       seq [OPTION]... FIRST LAST 
  8. #       seq [OPTION]... FIRST INCREMENT LAST 
  9. #DESCRIPTION 
  10. #       Print numbers from FIRST to LAST, in steps of INCREMENT. 
  11.  
  12. for i in $(seq -s ':' 1 10);do  
  13.     echo $i 
  14. done 
  15.  
  16.  
  17. for i in {1..10};do  
  18.     echo $i 
  19. done 

# 测试Hadoop HDFS

 
  
  1. $ cat test_hdfs.sh
  2.  
  3. #!/bin/bash  
  4. #test the hadoop HDFS  
  5. #date +%H%N 随机数  
  6. ######%N########nanoseconds (000000000..999999999) 亿分之一秒时间"纳秒"  
  7. ######%H########hour (00..23)以小时为时间戳
  8. #echo $RANDOM   
  9. #/dev/random  
  10.  
  11. #variables  
  12. loop=5000 
  13. bs=5k  
  14. count=1  
  15. dfs_dir=/data/dfs/ 
  16.  
  17.  
  18. #main  
  19. for((j=1;j<=100;j++));do 
  20.     mkdir -p ${dfs_dir}$j 
  21. #echo $dfs_dir && exit 1 
  22.  
  23. sleep 1 
  24. cat /dev/null > file  
  25. sleep 5 
  26. for ((i=1;i<=$loop;i++));do  
  27. date +%H%N >> file  
  28. done  
  29. sleep 10 
  30. while read line ;do   
  31. dd if=/dev/zero of=${dfs_dir}$j/$line bs=$bs count=$count > /dev/null 2>&1 && usleep 10000 
  32. #echo "$i" > ${dfs_dir}$line && usleep 10000 
  33. echo $line  
  34. done < file  
  35.  
  36. done 

# 挂载CIFS

 
  
  1. #!/bin/bash 
  2. #completed by dongnan 
  3. #Mount windows CIFS  
  4.  
  5. #variables 
  6. cifs_ip=192.168.1.100 
  7. cifs_user=administrator 
  8. cifs_pw=dongnan 
  9. cifs_share=aa 
  10. mount_point=/mnt/fat 
  11. mount=/sbin/mount.cifs 
  12. user_id=$(id -u) 
  13.  
  14.  
  15. #main 
  16. if [ "$user_id" -ne 0 ];then  
  17.     echo "must root or SUDO_USER !!"  
  18.     exit 1  
  19. fi  
  20.  
  21. if mount | grep -E "$cifs_share|$cifs_ip" > /dev/null 2>&1;then  
  22.     echo "Has been mounted" 
  23.     exit 1 
  24. fi 
  25.  
  26. $mount -o "username=$cifs_user,password=$cifs_pw" //${cifs_ip}/$cifs_share $mount_point 

# 统计windows 服务器 20120531

 
  
  1. cat find_windows.sh  
  2. #!/bin/bash 
  3. #test windows remote desktop 3389 port  
  4.  
  5. for i in {1..254};do nc -nvz -w 2 10.0.0.$i 3389 >/dev/null 2>&1 && echo 10.0.0.$i | tr '\n' ' '; done 

# 统计ESXi 服务器 20120601

 
  
  1. cat find_esxi.sh  
  2. #!/bin/bash 
  3. #ESXi port 443 and 902 
  4. for ip in 0 1;do  
  5. for i in {1..254};do nc -nz -w 2 10.0.${ip}.${i} 443 >/dev/null 2>&1 && nc -nz 10.0.${ip}.${i} 902 >/dev/null 2>&1 && echo 10.0.${ip}.${i} | tr '\n' ' '; done 
  6. done 

#多台linux服务器添加帐号,并添加到sudoers 20120605

 
  
  1. cat add-user.sh  
  2. #!/bin/bash 
  3. #add user for this host 
  4. #20120604 by dongnan 
  5.  
  6. #variables 
  7. ip=10.0.0. 
  8. hosts='201 202 203 204 205' 
  9. user='dongnan' 
  10. pw='dongnan' 
  11.  
  12. for host in $hosts;do 
  13.     echo "${ip}$host" 
  14.     ssh ${ip}$host "useradd $user && echo $pw | passwd --stdin $user && sed -ir '/^root.*ALL$/ a $user ALL=(ALL)  ALL' /etc/sudoers" 
  15.     #ssh ${ip}$host userdel -r $user 
  16. done