监控系统
查看服务器 系统 的相关信息
时刻监控 系统的运行状态
psutil
python system and process utilities
安装 psutil工具
pip3 install psutil
进入交互模式查看
python3
import psutil
确认模块已经安装好了
常见功能
获取CPU信息
# 获取 CPU信息
# 获取 CPU的核心数
print(psutil.cpu_count()) # 获取核心数(包括虚拟的核心数)
print(psutil.cpu_count(logical=False)) # 获取物理的核心数
获取内存
# 获取 内存信息
# 获取内存的整体信息(总共多少,用了多少,还剩多少)
print(psutil.virtual_memory())
# svmem(total=17179869184, 总计
# available=8433504256, 平均值
# percent=50.9, 百分比
# used=8180936704, 已使用
# free=2737885184, 空闲的
# active=5628534784, inactive=4447707136, wired=2552401920)
# 获取内存的使用率
print(psutil.virtual_memory().percent)
获取硬盘
# 获取 硬盘信息
# 获取硬盘的分区信息
print(psutil.disk_partitions())
# 获取指定目录的磁盘信息
print(psutil.disk_usage("/"))
# 获取使用率
print(psutil.disk_usage("/").percent)
获取网络
# 获取 网络信息
# 获取收到的数据包数量
print(psutil.net_io_counters().bytes_recv)
# 437827584
# 获取收到的数据包数量
print(psutil.net_io_counters().bytes_sent)
# 86791168
获取开机时间
# 获取开机时间
print(psutil.boot_time())
# 1639410432.0这是一个秒,需要转换为日期
import datetime
print(datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S"))
# 2021-12-13 23:47:12
总结
psutil 获取 服务器的硬件信息
获取cpu的信息
cpu核心数: psutil .cpu_count()
cpu使用率: psutil
.cpu_percent(interval=0.5) 得设置刷新频率
获取内存信息
内存的信息:psutil.virtual_memory()
内存的使用率:psutil.virtual_memory().percent)
获取硬盘的信息
硬盘的分区信息:psutil.disk_partitions()
硬盘的指定路径的硬盘信息:psutil.disk_usage("/")
硬盘的使用率:psutil.disk_usage("/").percent
网络数据信息:
收到的字节数:psutil.net_io_counters().bytes_recv
发送的字节数:psutil.net_io_counters().bytes_sent
系统监控基础版
拼接信息,让其显示格式
功能描述:
字节/1024----->kb/1024----->mb/1024------->GB
思路:
导入模块
定义变量,保存cpu信息,内存信息,硬盘信息,网络信息
拼接要显示的字符串(格式化字符串拼接)
保存信息到文件中
# 1. 导入 psutil 模块
import psutil
import datetime
# 2. 定义变量,保存CPU的使用率
cpu_per = psutil.cpu_percent(interval=0.5)
# 3. 定义变量,保存内存的信息
memory_info = psutil.virtual_memory()
# 4. 定义变量,保存硬盘的信息
disk_info = psutil.disk_usage("/")
# 5. 定义变量,保存网络的信息
net_info = psutil.net_io_counters()
# 获取系统当前时间
current_time = datetime.datetime.now().strftime("%F %T")
# 6. 拼接字符串显示
log_str = "|---------------------------|-------------|-----------------|-----------------|--------------------------|\n"
log_str += "| 监控时间 | CPU使用率 | 内存使用率 | 硬盘使用率 | 网络收发量 |\n"
log_str += "| | (共%d核CPU) | (总计%dG内存) | (总计%dG硬盘) | |\n" % (
psutil.cpu_count(logical=False), memory_info.total / 1024 / 1024 / 1024, disk_info.total / 1024 / 1024 / 1024)
log_str += "|--------------------------|--------------|--------------|--------------------|--------------------------|\n"
log_str += "| %s | %s%% | %s%% | %s%% | 收:%s/发:%s |\n" % (
current_time, cpu_per, memory_info.percent, disk_info.percent, net_info.bytes_recv, net_info.bytes_sent)
log_str += "|--------------------------|---------------|--------------|--------------------|--------------------------|\n"
print(log_str)
# 7. 保存监控信息到日志文件
f = open("log.txt", 'a')
f.write(log_str)
f.close()
|---------------------------|-------------|-----------------|-----------------|--------------------------|
| 监控时间 | CPU使用率 | 内存使用率 | 硬盘使用率 | 网络收发量 |
| | (共4核CPU) | (总计16G内存) | (总计233G硬盘) | |
|--------------------------|--------------|--------------|--------------------|--------------------------|
| 2021-12-14 23:25:58 | 0.0% | 51.6% | 75.4% | 收:527821824/发:93579264 |
|--------------------------|---------------|--------------|--------------------|--------------------------|
升级系统定时监控(增加定时功能)
# 1. 定义函数,实现信息的显示和日志的保存
# 2. 死循环,每隔一段时间显示一次
# 3. 导入 模块
import psutil
import datetime
def linux_monitor(time):
'''定义函数,实现硬件信息的获取'''
# 2. 定义变量,保存CPU的使用率
# 设置每隔time才能获取1次信息
cpu_per = psutil.cpu_percent(interval=time)
# 3. 定义变量,保存内存的信息
memory_info = psutil.virtual_memory()
# 4. 定义变量,保存硬盘的信息
disk_info = psutil.disk_usage("/")
# 5. 定义变量,保存网络的信息
net_info = psutil.net_io_counters()
# 获取系统当前时间
current_time = datetime.datetime.now().strftime("%F %T")
# 6. 拼接字符串显示
log_str = "|---------------------------|-------------|-----------------|-----------------|--------------------------|\n"
log_str += "| 监控时间 | CPU使用率 | 内存使用率 | 硬盘使用率 | 网络收发量 |\n"
log_str += "| | (共%d核CPU) | (总计%dG内存) | (总计%dG硬盘) | |\n" % (
psutil.cpu_count(logical=False), memory_info.total / 1024 / 1024 / 1024, disk_info.total / 1024 / 1024 / 1024)
log_str += "|--------------------------|--------------|--------------|--------------------|--------------------------|\n"
log_str += "| %s | %s%% | %s%% | %s%% | 收:%s/发:%s |\n" % (
current_time, cpu_per, memory_info.percent, disk_info.percent, net_info.bytes_recv, net_info.bytes_sent)
log_str += "|--------------------------|---------------|--------------|--------------------|--------------------------|\n"
print(log_str)
# 7. 保存监控信息到日志文件
f = open("log.txt", 'a')
f.write(log_str)
f.close()
def main():
"""程序的入口"""
while True:
linux_monitor(5)
if __name__ == '__main__':
main()
进到终端
找到该文件所在的位置
总结
数据流:
输入流
输出流
标准的错误输出流
重定向:改变数据的流向。
> 重定向
>> 以追加的方式冲顶先
管道: 一个命令的输出作为另外一个命令的输入去使用。
| 指令1|指令2 但是注意指令1必须有输出
软链接:相当于快捷方式,可以通过软链接修改源文件的内容。
ln -s 源文件 连接文件
硬链接:一个文件有多个名字,通过硬链接修改源文件的内容。
ln 源文件 连接文件
软硬连接区别:
软连接可以指向一个不存在的文件,硬链接不可以。
可以对目录创建软链接,不可以对目录创建硬链接。
删除源文件 对 软件接有影响, 对 硬链接 没有。
文件搜索
文本内部搜索
grep ‘内容’ 文件路径
计算机搜索文件
find ./ -name 文件名
find ./ -szie 大小
归档 和 压缩
归档:
tar -cvf 归档文件名.tar 文件1 文件2 …
解档:
tar -xvf 档案文件名
归档+解压
tar -zcvf 归档文件名.tar.gz 文件1 文件2 …
解压 + 解档
tar -zxvf 解压解档文件名.tar.gz
要是指定目录的话
tar -zxvf 解压档文件名.tar.gz -C 要解压的目录
归档和压缩 zip
压缩
zip
压缩目录 要加参数 -r
zip -r xxx.zip 目录
解压缩
unzip xxx.zip
指定解压目录
指定解压目录为aaa
unzip -d aaa xxx.zip
文件权限
9个字符吗表示
u g o
拥有者 u
组权限 g
其他用户全向 o
所有用户权限 a
每一组可以选的权限:
r w x
可读
可写
可执行
修改权限 chmod
子母法
chmod 用户+具体全向 文件名
数字法
r 4
w 2
x 1
- 0
三维权限数字
第一位:文件拥有者权限
第二位:同组用户权限
第三位:其他用户权限
用户管理
切换用户
临时 sudo 命令
永久
su 用户名 输
入用户名对应密码
sudo -s
输入当前用户的密码
修改密码
passwd 修改当前用户密码
passwd xxx 修改xx用户的密码
exit 没有用户,直接退出终端
多次切换用户,推到上次登陆的用户
who 查看当前系统登陆了哪些用户
-q 统计用户数
-u 显示最后一次操作的时间
关机
shutdown
shutdown 13:00 指定在下午一点关机
shutdown +20 20分钟后关机
重启
reboot
软件安装和卸载
三种安装方式
源代码包安装
deb包安装
apt-get方式
apt-get方式安装软件
配置软件源: 修改 etc/apt/source-list
更新软件源: sudo apt-get update
安装软件: sudo apt-get install 软件包名字
卸载软件: sudo apt-get remove 软件包名字
ssh远程登录
服务器端安装
ssh server
sudo apt-get install openssh-server
通过电脑客户端远程连接服务器
要求 服务器必须有 ssh server
登陆
ssh 服务器用户名@服务器地址
eg:
ssh demo@192.168.150.112
scp远程文件拷贝
文件从
本地 到 服务器 :上传
scp 本地路径 服务器用户@服务器ip:服务器路径
服务器到本地 : 下载
scp 服务器用户名@服务器ip:服务器路径 本地路径
如果操作是目录加参数-r
scp -r
eg:
vim 编辑器
三种模式:
命令模式
输入模式
末行模式
系统新功能监控
psutil 模块
监控系统信息发送邮件功能
yagmail模块
三句代码实现
安装 pip3 install yagmail
准备两个邮箱
一个是发送邮箱
一个是接受邮箱
发送成功了
# 导入模块
import yagmail
# 使用yagmail的类创建对象(发件人,发件人授权码,发件服务器)
# 发件人:user = @163.com
# 发件人授权码:password = xxx
# 发件服务器: host
ya_obj = yagmail.SMTP(user = 'xxx@163.com',password= 'xxx',host='smtp.163.com')
# 使用yagmail 对象发送邮件(指定收件人,邮件主题,发送内容)
content = '你好'
# send()发送邮件 指定 收件人 邮件主题 发送内容
ya_obj.send('xxxx@outlook.com','测试一下',content)
password 需要登录网页的对应发送邮件的163邮箱
开启POP3 获得
password
发送成功的结果显示如下:
让GPU超过80%系统自动发邮件
# 1. 定义函数,实现信息的显示和日志的保存
# 2. 死循环,每隔一段时间显示一次
# 3. 导入 模块
import psutil
import datetime
import yagmail
def linux_monitor(time):
'''定义函数,实现硬件信息的获取'''
# 2. 定义变量,保存CPU的使用率
# 设置每隔time才能获取1次信息
cpu_per = psutil.cpu_percent(interval=time)
# 3. 定义变量,保存内存的信息
memory_info = psutil.virtual_memory()
# 4. 定义变量,保存硬盘的信息
disk_info = psutil.disk_usage("/")
# 5. 定义变量,保存网络的信息
net_info = psutil.net_io_counters()
# 获取系统当前时间
current_time = datetime.datetime.now().strftime("%F %T")
# 6. 拼接字符串显示
log_str = "|---------------------------|-------------|-----------------|-----------------|--------------------------|\n"
log_str += "| 监控时间 | CPU使用率 | 内存使用率 | 硬盘使用率 | 网络收发量 |\n"
log_str += "| | (共%d核CPU) | (总计%dG内存) | (总计%dG硬盘) | |\n" % (
psutil.cpu_count(logical=False), memory_info.total / 1024 / 1024 / 1024, disk_info.total / 1024 / 1024 / 1024)
log_str += "|--------------------------|--------------|--------------|--------------------|--------------------------|\n"
log_str += "| %s | %s%% | %s%% | %s%% | 收:%s/发:%s |\n" % (
current_time, cpu_per, memory_info.percent, disk_info.percent, net_info.bytes_recv, net_info.bytes_sent)
log_str += "|--------------------------|---------------|--------------|--------------------|--------------------------|\n"
print(log_str)
# 7. 保存监控信息到日志文件
f = open("log.txt", 'a')
f.write(log_str)
f.close()
# 判断 内存超过80% CPU的占比就发送
if cpu_per > 80 or memory_info.percent > 80:
# 8. 发送邮件
ya_obj = yagmail.SMTP(user='xxxx@163.com', password='GDxxxxxOUSZQEE', host='smtp.163.com')
# 使用yagmail 对象发送邮件(指定收件人,邮件主题,发送内容)
content = log_str
# send()发送邮件 指定 收件人 邮件主题 发送内容
ya_obj.send('zxxxxxxxxxx11@outlook.com', '[系统监控报告]', content)
def main():
"""程序的入口"""
while True:
# 每隔5s发送一次
linux_monitor(5)
if __name__ == '__main__':
main()
思路总结回顾
思路:
- 导入模块
import yagmail - 创建发件对象 yagmail.SMTP(
user =‘发件人邮箱’,
passwrod = ‘邮箱授权码’,
host = ‘发件服务器’) - 发送邮件 obj.send(‘收件人’,'主题,‘内容’)
# 判断 内存超过80% CPU的占比就发送
if cpu_per > 80 or memory_info.percent > 80:
# 8. 发送邮件
ya_obj = yagmail.SMTP(user='xxxx@163.com', password='GDxxxxxOUSZQEE', host='smtp.163.com')
# 使用yagmail 对象发送邮件(指定收件人,邮件主题,发送内容)
content = log_str
# send()发送邮件 指定 收件人 邮件主题 发送内容
ya_obj.send('zxxxxxxxxxx11@outlook.com', '[系统监控报告]', content)