zoukankan      html  css  js  c++  java
  • shell脚本持续更新

    1.用shell查看磁盘是否大于80%并发送邮箱告警。

    分析如何查看磁盘占用:

    # df -h | grep /dev/vda1 | awk '{print $5}' |cut -d "%" -f1
    或者
    # df -h | grep /dev/vda1 | awk '{print $5}' |awk -F "%" '{print $1}'
    

    考虑到shell脚本if判断是否大于80,写入脚本:

    #!/bin/bash
    rate=`df -h | grep /dev/vda1 | awk '{print $5}' |cut -d "%" -f1`
    if [ $rate -ge 80 ];
          then
          python /root/mail.py 123456@qq.com "邮件主题" "邮件内容/dev/vda1 The disk is full"
     fi
    

    python脚本:

    #!/usr/bin/python
    #coding:utf-8
    
    import smtplib
    from email.mime.text import MIMEText
    import sys
    
    #发信地址
    mail_user = 'admin@' //账号
    #发信地址的SMTP密码
    mail_pass = 'pqj0Ll6yd' //密码
    
    def send_mail(to_list,subject,content):
        me = "aliyun告警平台"+"<"+mail_user+">"
        msg = MIMEText(content, 'plain', 'utf-8')
        msg['Subject'] = subject
        msg['From'] = me
        msg['to'] = to_list
    
        try:
        	#定义阿里云提供的SMTP服务地址
            s = smtplib.SMTP("smtpdm.aliyun.com", 25) //注,阿里云服务器是没开放25端口,改80端口即可
            s.login(mail_user,mail_pass)
            s.sendmail(me,to_list,msg.as_string())
            s.close()
            return True
        except Exception,e:
            print str(e)
            return False
    
    if __name__ == "__main__":
        send_mail(sys.argv[1], sys.argv[2], sys.argv[3])
    

    测试结果:

    2.判断nginx80端口是否开启,如果不开启,自动开启

    首先网络扫描nmap默认包是不存在,安装

    # yum install -y nmap
    

    分析端口是否开放

    # nmap -sT 192.168.109.136 | grep tcp |grep http |awk '{print $2}'
    open
    

    用shell脚本判断

     #!/bin/bash
      nginx=`nmap -sT 192.168.109.136 | grep tcp |grep http |awk '{print $2}'`
      data=`date +%Y%m%d`
      if [ "$http" == "open" ]
          then
          echo "$data nginx is ok! " >> /tmp/http-acc.log
          else
          /etc/init.d/nginx start &>/dev/null
          python /usr/local/sbin/mail.py 123456@qq.com "监控nginx宕机自动重启告警" "$data restart nginx!!!"//可以去掉告警
          echo "$data restart nginx !" >> /tmp/http-err.log
      fi
    

    测试结果

     3.用shell每天零晨备份mysql数据库,备份数据传输到备份服务器

    #!/bin/bash
    datadir=/tmp/mysql/`date +%Y%m%d` //定义时间
    datadb=dedecms //库名
    datadb1=discuz //库名
    datadb2=zrlog //库名
    dbuser=root //用户
    dbpass=123 //密码
    backcmd=mysqldump //备份命令 注:最好绝对路径
    if [ ! -d $datadir ];then //判断是否存在
            mkdir -p $datadir //不存在创建
            echo "mkdir successful" //成功
    else
            echo "mkdir failure" //失败,失败可能是目录存在,不用管
    fi
    $backcmd -u$dbuser -p$dbpass $datadb >$datadir/$datadb.sql //备份
    $backcmd -u$dbuser -p$dbpass $datadb1 >$datadir/$datadb1.sql //备份
    $backcmd -u$dbuser -p$dbpass $datadb2 >$datadir/$datadb2.sql //备份
    rsync -avP /tmp/mysql/ 172.31.215.135:/tmp/mysql //上传到备份服务器
    

    4.静态文件备份,要传到备份静态服务器

    #!/bin/bash
    BCK_DIR="/tmp/data" //定义路径
    WEB_DIR="/mnt/*" //定义备份路径
    DATE=`date +%F` //时间
    DATE_YEAR=`date +%Y` //时间
    DATE_MONTH=`date +%m` //时间
    days=7 //时间
    
    if test -d $BCK_DIR/$DATE_YEAR/$DATE_MONTH //判断
    then
        echo "directory  $BCK_DIR/$DATE_YEAR/$DATE_MONTH exists."
    else
        echo "directory $BCK_DIR/$DATE_YEAR/$DATE_MONTH does not exists. make dir..."
        mkdir -p $BCK_DIR/$DATE_YEAR/$DATE_MONTH //不存在创建
    fi
    
    # Backup
    tar -czf $BCK_DIR/$DATE_YEAR/$DATE_MONTH/web_$DATE.tar.gz  $WEB_DIR //打包
    find $BCK_DIR/$DATE_YEAR/ -type f -name "*.tar.gz" -mtime +$days -exec  rm -rf {} ; //超过7天删除
    rsync -avP $BCK_DIR 172.31.215.135:/tmp/data/ //拷贝到备份服务器
    

    5.批量创建用户并设置密码,把密码写入文件

    1. 随机密码使用命令 mkpasswd
    2. 在脚本中给用户设置密码,可以使用echo 然后管道passwd命令

     实现脚本如下:

    #!/bin/bash
    for i in `seq 00 09`
    do
    useradd user$i
    pass=`mkpasswd`
    echo "user$i $pass" >> /root/shell.txt
    echo "$pass" |passwd --stdin user$i &> /dev/null
    done         
    

    批量删除用户

    #!/bin/bash
    for i in `seq 00 09`
    do
    userdel -r user$i
    done

    监控java程序,自动重启

    #!/bin/bash
    jarname='acd.jar'
    data=`date '+%Y-%m-%d %H:%M:%S'`
    pid=`ps aux | grep $jarname | grep -v grep | awk '{print $2}'`
    arr=($pid)
    len=${#arr[@]}
    if [ $len -gt 0 ]
    then
    echo "$data acd.jar is ok" >> /tmp/acd-acc.log
    else
    nohup java -Xms128m -Xmx258m -jar acd-cms.jar > /dev/null 2>&1 &
    echo "$data restart acd.jar !" >> /tmp/acd-err.log
    fi
  • 相关阅读:
    node.js中的全局变量——global
    Element-UI库 源码架构浅析
    如何搭建一个自己cli
    webpack实践之DLLPlugin 和 DLLReferencePlugin
    HappyPack优化
    线程和进程
    kafka?kafaka! kafka...
    Dubbo的初步理解和使用
    Redis的安装和启动
    解析Spring MVC上传文件
  • 原文地址:https://www.cnblogs.com/yantou/p/12023010.html
Copyright © 2011-2022 走看看