判断是否是一个目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/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)

系统内存与磁盘检测

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/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访问量并以柱状图显示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/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()

查看网段里有多少ip地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/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钩子脚本,实现简单自动化操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/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地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/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缓存

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/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二进制日志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/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()

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/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('邮件发送失败')

转载并修改自

https://www.cnblogs.com/benjamin77/category/1117956.html
https://www.cnblogs.com/byfboke/articles/8992049.html
https://blog.csdn.net/weixin_41846313/article/details/85199364
https://blog.csdn.net/jiajiren11/article/details/90381703
https://blog.csdn.net/wxy941011/article/details/80274233