你必须知道的python运维常用脚本!(

发布时间:2019-09-23 17:03:07编辑:auto阅读(1948)

    github地址:https://github.com/opsonly, 上面是一个基于python3.7django2.1的多人博客系统,喜欢的可以给个star~



    判断是否是一个目录

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    # @Time    : 2018-12-18 15:16
    # @Author  : opsonly
    # @Site    : 
    # @File    : opsUse.py
    # @Software: PyCharm
    import os
    
    dir = "/var/www/html/EnjoyCarApi/"
    if os.path.isdir(dir):
        print('%s is a dir' % dir)
    else:
        print('%s is not a dir' % dir)
    

    系统内存与磁盘检测

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    # @Time    : 2018-12-17 17:16
    # @Author  : opsonly
    # @Site    : 
    # @File    : systemissue.py
    # @Software: PyCharm
    
    import psutil
    
    def memissue():
        print('内存信息:')
        mem = psutil.virtual_memory()
        # 单位换算为MB
        memtotal = mem.total/1024/1024
        memused = mem.used/1024/1024
        membaifen = str(mem.used/mem.total*100) + '%'
    
        print('%.2fMB' % memused)
        print('%.2fMB' % memtotal)
        print(membaifen)
    
    def cuplist():
        print('磁盘信息:')
        disk = psutil.disk_partitions()
        diskuse = psutil.disk_usage('/')
        #单位换算为GB
        diskused = diskuse.used / 1024 / 1024 / 1024
        disktotal = diskuse.total / 1024 / 1024 / 1024
        diskbaifen = diskused / disktotal * 100
        print('%.2fGB' % diskused)
        print('%.2fGB' % disktotal)
        print('%.2f' % diskbaifen)
    
    memissue()
    print('*******************')
    cuplist()

    统计nginx日志前十ip访问量并以柱状图显示

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    # @Time    : 2018-12-18 15:49
    # @Author  : opsonly
    # @Site    : 
    # @File    : nginx_ip.py
    # @Software: PyCharm
    
    import matplotlib.pyplot as plt
    #
    nginx_file = 'nginx2018-12-18_07:45:26'
    
    ip = {}
    # 筛选nginx日志文件中的ip
    with open(nginx_file) as f:
        for i in f.readlines():
            s = i.strip().split()[0]
            lengh = len(ip.keys())
    
            # 统计每个ip的访问量以字典存储
            if s in ip.keys():
                ip[s] = ip[s] + 1
            else:
                ip[s] = 1
    
    #以ip出现的次数排序返回对象为list
    ip = sorted(ip.items(), key=lambda e:e[1], reverse=True)
    
    #取列表前十
    newip = ip[0:10:1]
    tu = dict(newip)
    
    x = []
    y = []
    for k in tu:
        x.append(k)
        y.append(tu[k])
    plt.title('ip access')
    plt.xlabel('ip address')
    plt.ylabel('PV')
    
    #x轴项的翻转角度
    plt.xticks(rotation=70)
    
    #显示每个柱状图的值
    for a,b in zip(x,y):
        plt.text(a, b, '%.0f' % b, ha='center', va= 'bottom',fontsize=7)
    
    plt.bar(x,y)
    plt.legend()
    plt.show()

    test.png



    查看网段里有多少ip地址

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    # @Time    : 2018-12-18 15:31
    # @Author  : opsonly
    # @Site    : 
    # @File    : ipTest.py
    # @Software: PyCharm
    import IPy
    
    ip = IPy.IP('172.16.0.0/26')
    
    print(ip.len())
    for i in ip:
        print(i)


    gitlab钩子脚本,实现简单自动化操作

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    # @Time    : 2018-12-18 17:41
    # @Author  : opsonly
    # @Site    :
    # @File    : gitlabCi.py
    # @Software: PyCharm
    
    from flask import Flask,request,render_template,make_response,Response
    import json,os,re,requests
    import subprocess
    
    app = Flask(__name__)
    null = ""
    cmd = "/var/www/html/ladmin-devel/"
    @app.route('/test',methods=['POST'])
    def hello():
        json_dict = json.loads(request.data)
    
        name = json_dict['event_name']
        ref = json_dict['ref'][11:]
        project = json_dict['project']['name']
    
        if name == 'push' and ref == 'master':
            os.chdir(cmd)
            s = subprocess.getoutput('sudo -u nginx composer install')
            return Response(s)
        else:
            return Response('none')
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0',port=8080)

    解析一组域名的ip地址

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    # @Time    : 2018-12-20 10:21
    # @Author  : opsonly
    # @Site    : 
    # @File    : dnsReloves.py
    # @Software: PyCharm
    
    import dns.resolver
    from collections import defaultdict
    hosts = ['baidu.com','weibo.com']
    s = defaultdict(list)
    def query(hosts):
        for host in hosts:
            ip = dns.resolver.query(host,"A")
            for i in ip:
                s[host].append(i)
    
        return s
    
    for i in query(hosts):
    
        print(i,s[i])

    清除指定redis缓存

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    # @Time    : 2018-12-20 15:19
    # @Author  : opsonly
    # @Site    : 
    # @File    : redisdel.py
    # @Software: PyCharm
    
    import redis
    
    #选择连接的数据库
    db = input('输入数据库:')
    r = redis.Redis(host='127.0.0.1',port=6379,db=0)
    
    #输入要匹配的键名
    id = input('请输入要执匹配的字段:')
    arg = '*' + id + '*'
    
    n = r.keys(arg)
    #查看匹配到键值
    for i in n:
        print(i.decode('utf-8'))
    
    #确定清除的键名
    delid = input('输入要删除的键:')
    
    print('清除缓存 %s 成功' % delid)

    下载阿里云RDS二进制日志

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    # @Time    : 2018-12-12 13:52
    # @Author  : opsonly
    # @Site    : 
    # @File    : rds_binlog.py
    # @Software: PyCharm
    
    '''
    查询阿里云rds binlog日志
    '''
    
    import base64,urllib.request
    import hashlib
    import hmac
    import uuid,time,json,wget
    
    class RDS_BINLOG_RELATE(object):
    
        def __init__(self):
            #阿里云的id和key
            self.access_id = '**********************'
            self.access_key = '**********************'
    
        #通过id和key来进行签名
        def signed(self):
            timestamp = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())
            header = {
                'Action': 'DescribeBinlogFiles',
                'DBInstanceId': 'rm-sdfsfaf',
                'StartTime': '2018-07-11T15:00:00Z',
                'EndTime': timestamp,
                'Format': 'JSON',
                'Version': '2014-08-15',
                'AccessKeyId': self.access_id,
                'SignatureVersion': '1.0',
                'SignatureMethod': 'HMAC-SHA1',
                'SignatureNonce': str(uuid.uuid1()),
                'TimeStamp': timestamp,
    
            }
    
            #对请求头进行排序
            sortedD = sorted(header.items(), key=lambda x: x[0])
            url = 'https://rds.aliyuncs.com'
            canstring = ''
    
            #将请求参数以#连接
            for k, v in sortedD:
                canstring += '&' + self.percentEncode(k) + '=' + self.percentEncode(v)
    
            #对请求连接进行阿里云要的编码规则进行编码
            stiingToSign = 'GET&%2F&' + self.percentEncode(canstring[1:])
    
            bs = self.access_key + '&'
            bs = bytes(bs, encoding='utf8')
            stiingToSign = bytes(stiingToSign, encoding='utf8')
            h = hmac.new(bs, stiingToSign, hashlib.sha1)
            stiingToSign = base64.b64encode(h.digest()).strip()
    
            #将签名加入到请求头
            header['Signature'] = stiingToSign
    
            #返回url
            url = url + "/?" + urllib.parse.urlencode(header)
            return url
    
        #按照规则替换
        def percentEncode(self,store):
            encodeStr = store
            res = urllib.request.quote(encodeStr)
            res = res.replace('+', '%20')
            res = res.replace('*', '%2A')
            res = res.replace('%7E', '~')
            return str(res)
    
        #筛选出链接下载二进制日志文件
        def getBinLog(self):
            binlog_url = self.signed()
            req = urllib.request.urlopen(binlog_url)
            req = req.read().decode('utf8')
            res = json.loads(req)
    
            for i in res['Items']['BinLogFile']:
                wget.download(i['DownloadLink'])
    
    s = RDS_BINLOG_RELATE()
    s.getBinLog()

    12-27更新

    阿里云通过465端口发送邮件

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    # @Time    : 2018-12-26 15:41
    # @Author  : opsonly
    # @Site    : 
    # @File    : aliSendMail.py
    # @Software: PyCharm
    
    import smtplib
    import sys
    from email.mime.text import MIMEText
    from email.utils import formataddr
    
    #发件人邮箱账号
    my_sender = 'xxxxxxx'
    
    #发件人第三方客户端授权码
    my_pass = 'xxxxxx'
    
    #收件人邮箱账号
    my_user = 'xxxxxxxx'
    
    #接收参数并定义标题和内容
    subject = sys.argv[1]
    context = sys.argv[2]
    
    def mail():
    
        mail_msg = context
    
        #发送信息
        msg = MIMEText(mail_msg, 'html', 'utf-8')
        msg['From'] = formataddr(["dashui", my_sender])
        msg['To'] = formataddr(["dashui", my_user])
        msg['Subject'] = subject
    
        #因为阿里云25号端口默认关闭,采用465端口
        server = smtplib.SMTP_SSL("smtp.163.com", 465)
        server.login(my_sender, my_pass)
        server.sendmail(my_sender, [my_user, ], msg.as_string())
        server.quit()
    
    try:
        mail()
        print('邮件发送成功')
    except:
        print('邮件发送失败')

    喜欢我写的东西的朋友可以关注一下我的公众号,上面有我的学习资源以及一些其他福利:Devops部落
    你必须知道的python运维常用脚本!(日常更新)

关键字

上一篇: Python简单爬虫

下一篇: ubuntu安装python 3.7.3