你必须知道的Python运维常用脚本!(日常更新)
【摘要】 自动化运维脚本,喜欢的可以关注一下,欢迎点赞评论,不断更新哦~
github地址:https://github.com/opsonly, 上面是一个基于python3.7
和django2.1
的多人博客系统,喜欢的可以给个star~
判断是否是一个目录
#!/usr/bin/env python3# -*- coding: utf-8 -*-# @Time : 2018-12-18 15:16# @Author : opsonly# @Site : # @File : opsUse.py# @Software: PyCharmimport 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: PyCharmimport psutildef 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: PyCharmimport matplotlib.pyplot as plt#nginx_file = 'nginx2018-12-18_07:45:26'ip = {}# 筛选nginx日志文件中的ipwith 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出现的次数排序返回对象为listip = 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()
查看网段里有多少ip地址
#!/usr/bin/env python3# -*- coding: utf-8 -*-# @Time : 2018-12-18 15:31# @Author : opsonly# @Site : # @File : ipTest.py# @Software: PyCharmimport 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: PyCharmfrom 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: PyCharmimport 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 sfor 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: PyCharmimport 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.requestimport hashlibimport hmacimport uuid,time,json,wgetclass 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-wz9azm783q621n9', '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()
喜欢的可以关注一下,欢迎点赞评论,不断更新哦~
------------------------------------------------------
本文转自丁小水博客51CTO博客
原文链接:http://blog.51cto.com/dashui/2334754
如需转载,请联系作者授权。
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)