1、查看内存占比
#!utf-8
import os
lis = []
sram = 0
str1 = os.popen('ps aux','r').readlines()
#os.popen,管道输出
strsum = os.popen('grep MemTotal /proc/meminfo','r').readlines()
for i in strsum:
sumram = i.split()
print('总内存:%s'%sumram[1],'kb')
for i in str1:
str2 = i.split()
new_rss = str2[5]
lis.append(new_rss)
for i in lis[1:-1]:
num = int(i)
sram = sram + num
print('已使用内存:%s' %sram,'kb')
2、系统信息python脚本
import psutil
import datetime
import time
# 当前时间
now_time = time.strftime('%Y-%m-%d-%H:%M:%S', time.localtime(time.time()))
print(now_time)
# 查看cpu物理个数的信息
print(u"物理CPU个数: %s" % psutil.cpu_count(logical=False))
#CPU的使用率
cpu = (str(psutil.cpu_percent(1))) + '%'
print(u"cup使用率: %s" % cpu)
#查看内存信息,剩余内存.free 总共.total
#round()函数方法为返回浮点数x的四舍五入值。
free = str(round(psutil.virtual_memory().free / (1024.0 * 1024.0 * 1024.0), 2))
total = str(round(psutil.virtual_memory().total / (1024.0 * 1024.0 * 1024.0), 2))
memory = int(psutil.virtual_memory().total - psutil.virtual_memory().free) / float(psutil.virtual_memory().total)
print(u"物理内存: %s G" % total)
print(u"剩余物理内存: %s G" % free)
print(u"物理内存使用率: %s %%" % int(memory * 100))
# 系统启动时间
print(u"系统启动时间: %s" % datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S"))
# 系统用户
users_count = len(psutil.users())
users_list = ",".join([u.name for u in psutil.users()])
print(u"当前有%s个用户,分别是 %s" % (users_count, users_list))
#网卡,可以得到网卡属性,连接数,当前流量等信息
net = psutil.net_io_counters()
bytes_sent = '{0:.2f} Mb'.format(net.bytes_recv / 1024 / 1024)
bytes_rcvd = '{0:.2f} Mb'.format(net.bytes_sent / 1024 / 1024)
print(u"网卡接收流量 %s 网卡发送流量 %s" % (bytes_rcvd, bytes_sent))
io = psutil.disk_partitions()
# print(io)
# print("io[-1]为",io[-1])
#del io[-1]
print('-----------------------------磁盘信息---------------------------------------')
print("系统磁盘信息:" + str(io))
for i in io:
o = psutil.disk_usage(i.device)
print("总容量:" + str(int(o.total / (1024.0 * 1024.0 * 1024.0))) + "G")
print("已用容量:" + str(int(o.used / (1024.0 * 1024.0 * 1024.0))) + "G")
print("可用容量:" + str(int(o.free / (1024.0 * 1024.0 * 1024.0))) + "G")
print('-----------------------------进程信息-------------------------------------')
# 查看系统全部进程
for pnum in psutil.pids():
p = psutil.Process(pnum)
print(u"进程名 %-20s 内存利用率 %-18s 进程状态 %-10s 创建时间 %-10s " \
% (p.name(), p.memory_percent(), p.status(),time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(p.create_time()))))
#后面是时间格式化
View Code
3、如果服务器内存或者cpu使用率超过多少,值后就发送邮件
import psutil
def send_email(message):
# smtplib 用于邮件的发信动作
import smtplib
from email.mime.text import MIMEText
# email 用于构建邮件内容
from email.header import Header
# 用于构建邮件头
# 发信方的信息:发信邮箱,QQ 邮箱授权码
from_addr = '402290116@qq.com'
password = 'kdnofixadmtrbiaf'
# 邮箱的授权码在qq邮箱里打开
# 收信方邮箱
to_addr = 'system_temp@163.com'
# 发信服务器
smtp_server = 'smtp.qq.com'
# 邮箱正文内容,第一个参数为内容,第二个参数为格式(plain 为纯文本),第三个参数为编码
msg = MIMEText(message, 'plain', 'utf-8')
# 邮件头信息
msg['From'] = Header(from_addr)
msg['To'] = Header(to_addr)
msg['Subject'] = Header('Warning, the server has an exception')
# 开启发信服务,这里使用的是加密传输
server = smtplib.SMTP_SSL(smtp_server)
server.connect(smtp_server, 465)
# 登录发信邮箱
server.login(from_addr, password)
# 发送邮件
server.sendmail(from_addr, to_addr, msg.as_string())
# 关闭服务器
server.quit()
return '发送成功'
#磁盘信息
diskinfo = psutil.disk_usage('/')
#内存信息
meminfo = psutil.virtual_memory()
free = str(round(psutil.virtual_memory().free / (1024.0 * 1024.0 * 1024.0), 2))
total = str(round(psutil.virtual_memory().total / (1024.0 * 1024.0 * 1024.0), 2))
memory = int(psutil.virtual_memory().total - psutil.virtual_memory().free) / float(psutil.virtual_memory().total)
# print(u"物理内存: %s G" % total)
# print(u"剩余物理内存: %s G" % free)
# print(u"物理内存使用率: %s %%" % int(memory * 100))
cpu = (float(psutil.cpu_percent(1)))
print(u"cup使用率: %s" % cpu+ '%')
used_memory = int(memory*100)
if used_memory > 70 or cpu > 30:
send_email('服务器内存使用率超过70%,请及时处理')
4、通过文件名,和时间来删除SQL的日志
#! /usr/bin/local/python3
# -*- coding: utf-8 -*-
import os,time,shutil
#shutil模块作用
# 1、快速的文件复制
# 2、快速的文件压缩
# 3、快速的文件目录递归复制
path = os.getcwd() #用于返回当前工作目录
target_dir = [] #目标目录
cal = [] #文件名
target_dir.append('/var/log/')
target_dir.append('/newlogs/')
target_dir.append('/oldlogs/')
#初始化删除文件名
del_ext = ['frm','MYD','MYI'] #扩展名
#你要保留几天
days_before = 90
#初始化删除日期
for x in range(days_before+1,days_before+30):
cal.append(time.strftime('%Y_%m_%d',time.localtime(time.time() - x*24*3600)))
#time.strftim :接收以时间元组,并返回以可读字符串表示的当地时间,格式由参数format决定。[time.strftime(format[, t])]
#time.localtime:作用是格式化时间戳
#time.time:当前时间戳
#初始化删除文件名,使用笛卡尔积!
fl = map('.'.join, [[x,y] for x in cal for y in del_ext])#
#通过map函数, 组成文件名
#f1=map('.'.join,[[2, 'frm'], [2, 'MYD'], [2, 'MYI'], [3, 'frm'], [3, 'MYD'], [3, 'MYI']])
'''
map :map() 会根据提供的函数对指定序列做映射
例子
def square(x) : # 计算平方数
return x ** 2
map(square, [1,2,3,4,5]) # 计算列表各个元素的平方
结果:[1, 4, 9, 16, 25]
'''
#——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
#以日期命名的文件夹
cal = []
for x in range(days_before+1,days_before+30):
cal.append(time.strftime('%Y-%m-%d',time.localtime(time.time() - x*24*3600)))
fl += cal
#获取文件扩展名
def get_ext(filename):
return filename.split('.')[-1]
for dirs in target_dir:
#files = [i for i in box_list if(get_ext(i) in del_ext)] #按扩展名筛选文件
#修改当前工作目录
i = 0
print('opening -> ' + dirs)
#判断文件夹存在
if os.path.exists(dirs): #如果路径 path 存在,返回 True;如果路径 path 不存在,返回 False。
#切换目录
os.chdir(dirs)#os.chdir() 方法用于改变当前工作目录到指定的路径。
for files in fl:
#判断文件夹或文件
if(os.path.isfile(str(files))): #os.path.isfile判断路径是否为文件
i += 1
try:
os.remove(files) #os.remove() 方法用于删除指定路径的文件。如果指定的路径是一个目录,将抛出OSError。
print(files + ' deleted')
except:
print('error occurs while deleting file')
elif(os.path.isdir(str(files))): #os.path.isdir()用于判断对象是否为一个目录
i += 1
try:
#shutil.rmtree删除非空文件夹
shutil.rmtree(files) #shutil.rmtree() 表示递归删除文件夹下的所有子文件夹和子文件
print(files + ' deleted')
except:
print('error occurs while deleting file')
else:
print('Error on opening ' + dirs)
if i:
print(str(i) + ' files deleted')
else:
print('nothing to remove')
print('leaving -> ' + dirs)
#修改后 ,我未测试。
摘录网上的,删除SQL的日志文件
5、通过日志的最后访问时间,删除3个月以上的日志文件
import os, datetime,time
delday = 90 * 24 *3600
base_dir = '/data/webdata/log'
list = os.listdir(base_dir)
#os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
filelist = []
for i in range(0, len(list)): #len(list)有多少个文件或文件夹
path = os.path.join(base_dir, list[i]) #目录和名字相拼接
if os.path.isfile(path): #判断是否为文件,如果是文件则加入空列表
filelist.append(list[i])
'''
os.path.isdir()和os.path.isfile()需要传入的参数是绝对路径,但是os.listdir()返回的只是一个某个路径下的文件和列表的名称.**
常见错误:直接使用os.listdir()的返回值当做os.path.isdir()和os.path.isfile()的入参
正确用法:需要先使用python路径拼接os.path.join()函数,将os.listdir()返回的名称拼接成文件或目录的绝对路径
再传入os.path.isdir()和os.path.isfile()
'''
for i in range(0, len(filelist)):
path = os.path.join(base_dir, filelist[i])
if os.path.isdir(path): #判断是否为文件
continue
#方法1
timestamp = os.path.getmtime(path) #返回最近文件修改时间
# 方法2 :os.stat :用于在给定的路径上执行一个系统 stat 的调用。
#st_atime: 上次访问的时间。
#st_mtime: 最后一次修改的时间。
ts1 = os.stat(path).st_mtime
#
current_time = time.time() #当前时间
print(type(current_time))
time_difference=current_time - timestamp
if time_difference > delday :
os.remove(path)
print(path,'已删除')
# date = datetime.datetime.fromtimestamp(timestamp)
# print(list[i], ' 最近修改时间是: ', date.strftime('%Y-%m-%d %H:%M:%S'))
删除文件