• shell脚本


    开发脚本自动部署及监控

        1.编写脚本自动部署反向代理、web、nfs;

                 要求:

                         I、部署nginx反向代理三个web服务,调度算法使用加权轮询;

                         II、所有web服务使用共享存储nfs,保证所有web都对其有读写权限,保证数据一致性;

        2.编写监控脚本,监控集群内所有服务存活状态,内存、磁盘剩余率检测,异常则发送报警邮件

    3.编写计划任务,定时运行监控脚本,完成监控操作

    1.编写脚本自动部署反向代理、web、nfs;

    要求: 

    开发脚本自动部署及监控

    I、部署nginx反向代理三个web服务,调度算法使用加权轮询;

     

    #!/bin/bash

        yum install epel-release -y -q

        yum install gcc-* glibc-* openssl openssl-devel pcre pcre-devel zlib zlib-devel -y -q

        yum install nginx -y -q

        echo "install nginx successful"

    fi

    if [ -f /etc/nginx/nginx.conf ];then

        /bin/cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

        sed -ri '/^http/a\t upstream luchuangao { server 192.168.152.135 weight=3; server 192.168.152.136; server 192.168.152.137; }' /etc/nginx/nginx.conf

        sed -ri '/^ *location / {/a\t proxy_pass http://luchuangao;' /etc/nginx/nginx.conf

        echo "Configuration successful"

    fi

    if [ $ngxStatus -lt 2 ];then

        systemctl start nginx

        echo "Start nginx successful"

    fi

    }

    function nfsInstall() {

    if [ -e /usr/sbin/rpcinfo ];then

        echo "nfs already installed"

        exit 111

    else

        yum install rpcbind nfs-utils -y -q

        echo "install NFS successful"

    fi

    if [ ! -d /share ];then

        mkdir -p /share

        chmod -R o+w /share

    fi

    echo '/share 192.168.239.0/24(rw,sync,fsid=0)' > /etc/exports

    systemctl enable rpcbind.service

    systemctl enable nfs-server.service

    systemctl start rpcbind.service

    systemctl start nfs-server.service

    echo "Start NFS successful"

    }

    ngxProxyInstall

    nfsInstall

    II、所有web服务使用共享存储nfs,保证所有web都对其有读写权限,保证数据一致性;

     

    #!/bin/sh

    ngxStatus=`ps aux | grep -v grep |grep -c nginx`

    ipAddress="192.168.239.136"

    function ngxWebInstall(){

    if [ -e /usr/sbin/nginx ];then

        echo "nginx already installed"

        exit 110

    else

        #yum install gcc-* glibc-* openssl openssl-devel pcre pcre-devel zlib zlib-devel -y -q

        yum install nginx -y -q

        echo "install nginx successful"

    fi

    if [ -f /etc/nginx/nginx.conf ];then

        /bin/cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

        sed  -ri '/^ *location / {/a\t root /data/www/html; index index.html;' /etc/nginx/nginx.conf

        mkdir -p /data/www/html

        echo `hostname` > /data/www/html/index.html

        echo "Configuration successful"

    fi

    if [ $ngxStatus -lt 2 ];then

        systemctl start nginx

        echo "Start nginx successful"

    fi

    }

    function nfsInstall(){

    if [ ! -e /usr/sbin/rpcinfo ];then

        yum install rpcbind nfs-utils -y -q

        echo "install NFS successful"

    fi

    systemctl enable rpcbind.service

    systemctl enable nfs-server.service

    systemctl start rpcbind.service

    systemctl start nfs-server.service

    mount -t nfs $ipAddress:/share /data/www/html/

    echo "welcome luchuangao" > /data/www/html/test.html

    }

    ngxWebInstall

    nfsInstall

    2.编写监控脚本,监控集群内 Nginx、NFS 服务存活状态,内存、磁盘剩余率检测,异常则发送报警邮件

    步骤一:准备发送邮件的工具

     

    #!/usr/bin/python

    # -*- coding: UTF-8 -*-

    import sys

    import smtplib

    import email.mime.multipart

    import email.mime.text

    server = 'smtp.163.com'

    port = '25'

    def sendmail(server,port,user,pwd,msg):

        smtp = smtplib.SMTP()

        smtp.connect(server,port)

        smtp.login(user, pwd)

        smtp.sendmail(msg['from'], msg['to'], msg.as_string())

        smtp.quit()

        print('邮件发送成功email has send out !')

    if __name__ == '__main__':

        msg = email.mime.multipart.MIMEMultipart()

        msg['Subject'] = '你是风儿我是沙,缠缠绵绵回我家'

        msg['From'] = 'python4_mail@163.com'

        msg['To'] = 'python4_recvmail@163.com'

        user = 'python4_mail'

        pwd = 'sbalex3714'

        content='%s %s' %(' '.join(sys.argv[1:4]),' '.join(sys.argv[4:])) #格式处理,专门针对我们的邮件格式

        txt = email.mime.text.MIMEText(content, _charset='utf-8')

        msg.attach(txt)

    步骤二:将上述文件内容拷贝到/usr/bin/my_mail并chmod+x /usr/bin/my_mail

    步骤三:然后新建监控脚本sysCheck.sh

     

    #!/bin/sh

    function ngxMonitor(){  #监控nginx服务

    ps aux | grep nginx| grep -v grep &>/dev/null

    if [ $? -ne 0 ];then

        msg="TIME:$(date +%F_%T)

             HOSTNAME:$(hostname)

             IPADDR:$(/usr/sbin/ifconfig |awk 'NR==2{print $2}')

             MSG:Nginx program is crash, Waiting to restart"

        echo $msg

        /usr/bin/my_mail $msg

        systemctl restart nginx

    fi

    }

    function nfsMonitor(){ #监控nfs服务

    ps aux | grep nfs| grep -v grep &>/dev/null

    if [ $? -ne 0 ];then

        msg="TIME:$(date +%F_%T)

             HOSTNAME:$(hostname)

             IPADDR:$(/usr/sbin/ifconfig |awk 'NR==2{print $2}')

             MSG:NFS program is crash, Waiting to restart"

        echo $msg

        /usr/bin/my_mail $msg

        systemctl restart nginx

    fi

    }

    function memMonitor(){  #监控内存

    mem_use=`free | awk 'NR==2{print $3}'`

    mem_total=`free | awk 'NR==2{print $2}'`

    mem_per=`echo "scale=2;$mem_use/$mem_total"|bc -l |cut -d . -f2`

    if [ ! -e /usr/bin/bc ];then

        yum install bc -y -q

        echo "bc install successful"

    fi

    if (( $mem_per > 10 )); then

        msg="TIME:$(date +%F_%T)

             HOSTNAME:$(hostname)

             IPADDR:$(/usr/sbin/ifconfig |awk 'NR==2{print $2}')

             MSG:Memory usage exceeds the limit,current value is ${mem_per}%"

             echo $msg

             /usr/bin/my_mail $msg

    fi

    }

    function diskMonitor(){  #监控磁盘

    space_use=`df $disk |awk 'NR==2{print $5}'|cut -d% -f1`

    if [ $space_use -gt 80 ];then

        msg="TIME:$(date +%F_%T)

             HOSTNAME:$(hostname)

             IPADDR:$(/usr/sbin/ifconfig |awk 'NR==2{print $2}')

             MSG:Disk space usage exceeds the limit,current value is ${space_use}%"

        echo $msg

        /usr/bin/my_mail $msg

    fi

    }

    ngxMonitor  &>>/tmp/monitor.log

    nfsMonitor  &>>/tmp/monitor.log

    memMonitor  &>>/tmp/monitor.log

    diskMonitor &>>/tmp/monitor.log

    3.编写计划任务,定时运行监控脚本,完成监控操作

     * * * * * /shell/sysCheck.sh

  • 相关阅读:
    数组中的stdClass Object如何访问
    Django Forms的错误提示
    Thymeleaf+layui+jquery复选框回显
    使用jquery刷新页面以及javascript的一些基本函数
    jQuery遍历的几种方式
    Js和Thymeleaf如何获取model中的值
    数据库索引的理解
    HTTPS
    设计模式 命令模式
    饰者模式
  • 原文地址:https://www.cnblogs.com/amiee-785563694/p/6619214.html
Copyright © 2020-2023  润新知