Linux系统自动化运维(Python版)全套教学课件_第1页
Linux系统自动化运维(Python版)全套教学课件_第2页
Linux系统自动化运维(Python版)全套教学课件_第3页
Linux系统自动化运维(Python版)全套教学课件_第4页
Linux系统自动化运维(Python版)全套教学课件_第5页
已阅读5页,还剩388页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Linux系统自动化运维(Python版)(微课版)工业和信息化精品系列教材项目1

系统自动运维:从Shell到Python全套可编辑PPT课件能力CAPACITY要求了解系统自动化运维的基本知识。了解Shell编程,掌握系统管理和运维的Shell编程。了解Python编程,掌握使用Python编写自动化运维程序的流程。掌握使用Python编程执行外部命令的方法。任务1.2使用Python提升系统自动化运维技能任务1.1从Shell编程开始系统自动化运维任务1.3使用Python执行外部命令任务1.1从Shell编程开始系统自动化运维任务说明01OPTION02OPTION03OPTION了解系统自动化运维的基本知识了解Shell及其编程的基本知识准备系统自动化运维的实验环境04OPTION05OPTION掌握系统管理类Shell编程掌握系统运维类Shell编程任务1.1从Shell编程开始系统自动化运维相关知识1.1.1初识系统自动化运维传统运维方式面临的挑战

效率低容易失误被动运维缺乏流程化和标准化的运维机制任务1.1从Shell编程开始系统自动化运维相关知识1.1.1初识系统自动化运维系统自动化运维主要工作内容系统自动化运维系统预备安装操作系统安装软件包初始化系统配置管理定制配置文件持续集成和持续交付远程管理服务器部署应用监控报警服务器可用性监控自动报警安全监控性能监控任务1.1从Shell编程开始系统自动化运维相关知识1.1.2Linux系统自动化运维的基本工具——Shell脚本什么是ShellShell提供了用户和系统交互的接口

。Shell是一个命令解释器,拥有内建的Shell命令集。Shell同时是一种编程语言。Shell脚本的特点Shell具有很多类似C语言和其他编程语言的特征。Shell脚本与批处理文件很相似,可以包含任意输入的Linux命令,包括命令行工具。Shell脚本是解释执行的,不需要编译。Shell编程最基本的功能之一就是汇集一些在命令行中输入的连续指令。任务1.1从Shell编程开始系统自动化运维相关知识1.1.2Linux系统自动化运维的基本工具——Shell脚本Shell脚本与Linux系统运维使用Shell脚本有助于提高运维工程师的工作效率。Linux系统提供了功能强大的文本处理命令行工具。Shell编程具有简单、便捷的优势,特别适合用来开发一些常见的系统脚本。Shell编程的步骤编写Shell脚本执行Shell脚本任务1.1从Shell编程开始系统自动化运维任务实现任务1.1.1准备实验环境完成运维工作站的部署在Ubuntu系统中启用root账户(1)为root账户设置密码。(2)编辑/usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf配置文件。(3)编辑/etc/pam.d/gdm-autologin文件。(4)编辑/etc/pam.d/gdm-password文件。(5)编辑/root/.profile文件。(6)重启系统就能够以root账户登录Ubuntu系统。任务1.1从Shell编程开始系统自动化运维任务实现任务1.1.2编写Shell脚本批量创建Linux用户账户批量添加用户账户的Shell脚本#添加一个名为testers的用户组groupaddtestersif[$?-eq0];thenecho"添加用户组testers成功!"fi#创建10个用户账户,命名为tester01至tester10,并将其加入testers组foriin`seq-w110`douseradd-m-Gtesterstester$iif[$?-eq0];thenecho"添加用户账户tester$i成功!"fi#将每个用户账户的初始密码设置为其用户名,这是一种修改密码的非交互方式

echotester$i:tester$i|chpasswdif[$?-eq0];thenecho"用户账户tester$i的初始密码:tester$i"fidone任务1.1从Shell编程开始系统自动化运维任务实现任务1.1.2编写Shell脚本批量创建Linux用户账户批量删除用户账户的Shell脚本#!/bin/bashforiin`seq-w110`douserdel-rtester$iif[$?-eq0];thenecho"删除用户账户tester$i成功!"fidonegroupdeltestersif[$?-eq0];thenecho"删除用户组testers成功!"fi任务1.1从Shell编程开始系统自动化运维任务实现任务1.1.3编写Shell脚本批量检测主机在线状态#!/usr/bin/bash#定义3种颜色来区分主机在线状态redFont=""\033[1;31m"greenFont="\e[32m"whiteFont="\e[0m"whilereadhostdoforcountin{1..3}doping-c1-W1$host&>/dev/nullif[$?-eq0];then#echo命令以不同颜色显示内容需要使用-e选项

echo-e"${greenFont}"${host}主机${whiteFont}"正在运行"breakelsefail_count[$count]=$hostfidone任务1.1从Shell编程开始系统自动化运维任务实现任务1.1.3编写Shell脚本批量检测主机在线状态if[${#fail_count[*]}-eq3];thenecho-e"${redFont}"${host}主机${whiteFont}"停止运行"unsetfail_count[*]fidone<host_listecho-e"${whiteFont}"任务1.1从Shell编程开始系统自动化运维任务实现任务1.1.4编写Shell脚本一键安装JDK(1)创建安装目录。(2)将JDK压缩包解压缩到安装目录。(3)修改JDK版本的目录名。(4)检查/etc/profile文件中是否已有相应的环境变量,以解决脚本重复执行问题。(5)向/etc/profile文件中添加Java环境变量设置。(6)加载/etc/profile文件使环境变量生效。(7)检查安装是否成功。任务1.1从Shell编程开始系统自动化运维任务实现任务1.1.5编写Shell脚本监控Linux系统性能了解Linux系统性能数据的获取方法通过Linux系统的/proc伪文件系统来监控系统可以兼顾不同Linux发行版。/proc/stat文件提供系统进程整体的统计信息,包含所有CPU活动的信息。CPU时间=user+nice+system+idle+iowait+irq+softirqCPU使用率=(idle2-idle1)/(cpu2-cpu1)/proc/meminfo文件提供系统内存的使用信息。内存使用率=(MemTotal–MemFree-Inactive)/MemTotal任务1.1认识Linux和Ubuntu任务实现任务1.1.5编写Shell脚本监控Linux系统性能编写系统性能监控脚本#定义获取CPU使用率的函数#使用grep'cpu'过滤CPU总的使用情况,输出第2~第8个字段对应的时间#获取CPU空闲的时间(不包含I/O等待)#合计cpu_time1中各列的值#等5秒之后再测下一次CPU时间#计算CPU总的空闲时间#计算CPU总的使用时间#计算CPU使用率#定义获取内存使用率的函数#依次执行以上两个函数#设置百分比限额#CPU或内存使用率超出限制报警任务1.1认识Linux和Ubuntu任务实现任务1.1.5编写Shell脚本监控Linux系统性能使用Cron服务定时运行监控任务(1)为上述Shell脚本文件赋予执行权限。(2)执行crontab-e命令,进入Cron服务配置文件编辑界面。(3)在Cron服务配置文件编辑界面最后一行输入以下代码,然后保存并关闭该文件。*/2****/autoom/01start/sys_mon.sh(4)执行crontab-l命令检查Cron服务配置文件的内容。(5)验证监控任务的定时运行。(6)修改sys_mon.sh脚本,在其中添加获取脚本文件所在的目录的语句,并修改sysinfo.txt和warning.txt文件的路径到该目录下。任务1.2使用Python提升系统自动化运维技能任务1.1从Shell编程开始系统自动化运维任务1.3使用Python执行外部命令任务1.2使用Python提升系统自动化运维技能任务说明01OPTION02OPTION03OPTION了解系统自动化运维与Python编程了解Python的模块、包和库的概念学会搭建Python开发环境04OPTION掌握使用Python编写系统运维程序的流程任务1.2使用Python提升系统自动化运维技能相关知识1.2.1Python简介Python语法简洁、清晰,具有丰富和强大的库。Python最初被设计用于编写自动化脚本。Python使用优雅的语法,让编写的程序易于阅读。Python是一种解释型的编程语言。Python是一种面向对象的语言。Python易于扩展。Python是高级编程语言。Python适用面广。任务1.2使用Python提升系统自动化运维技能相关知识1.2.2Python的模块、包与库模块(Module)用来从逻辑上组织Python代码,将相关的代码归到一个模块能让代码更好用、更易读。包(Package)定义了一个由模块和子包组成的Python程序执行环境。包本质上就是一个分层次的文件目录,包括若干模块和若干子包。库(Library)是借用自其他编程语言的概念,通常是指具有相关功能模块的集合。在Python中,库可以是模块的形式,也可以是包的形式,实际是一个具有特定功能的代码组合,库中可以包含包、模块和函数。任务1.2使用Python提升系统自动化运维技能相关知识1.2.3Python与系统自动化运维Python特别适合运维工程师用来编程。Python可以用来开发复杂的运维软件、基于Web的管理工具和自动化运维平台。Python的标准库对操作系统的接口进行了封装,内置对POSIX以及其他常规操作工具的支持。Python程序相对于Shell脚本具有跨平台的优势。Python拥有大量的用于自动化运维的第三方库。运维工程师可以通过Python编程系统地整合多种运维工具和软件,还可以使用Python对运维常用的工具或平台进行二次开发。Python具有程序开发效率高的优势。任务1.2使用Python提升系统自动化运维技能任务实现任务1.2.1搭建Python开发环境安装Python查验预装的版本创建一个python符号链接ln-s/usr/bin/python3/usr/bin/python安装和配置Python包管理器安装Python包管理器aptinstallpython3-pip更改配置统一指定pip安装源pipconfigsetglobal.index-url/pypi/simple/pipconfigsetglobal.extra-index-url/simple/任务1.2使用Python提升系统自动化运维技能任务实现任务1.2.1搭建Python开发环境创建和管理Python虚拟环境(1)安装venv模块。root@autowks:~#aptinstallpython3.8-venv(2)在当前目录下创建一个虚拟环境。root@autowks:~#python3-mvenvtest-venv(3)激活虚拟环境。root@autowks:~#sourcetest-venv/bin/activate(test-venv)root@autowks:~#(4)试用虚拟环境。(5)关闭虚拟环境。在指定虚拟环境下完成任务后,可以执行以下命令关闭虚拟环境。(test-venv)root@autowks:~#deactivateroot@autowks:~#任务1.2使用Python提升系统自动化运维技能任务实现任务1.2.1搭建Python开发环境在Ubuntu系统中安装PyCharmPyCharm版本专业版PyCharmProfessional社区版即PyCharmCommunityEditionPyCharm安装使用Snap安装PyCharm社区版简称PyCharmCE)任务1.2使用Python提升系统自动化运维技能任务实现任务1.2.1搭建Python开发环境PyCharm初始化设置定制PyCharm选装功能性插件任务1.2使用Python提升系统自动化运维技能任务实现任务1.2.2编写Python程序监控Linux系统性能实现思路使用Python脚本从/proc伪文件系统读取性能数据。通过/proc/net/dev实时获取网络接口及统计信息。编写Python脚本从/proc伪文件系统获取CPU使用率、内存使用率和网络接口收发数据量。任务1.2使用Python提升系统自动化运维技能任务实现任务1.2.2编写Python程序监控Linux系统性能创建Python项目项目创建新创建的Python项目任务1.2使用Python提升系统自动化运维技能任务实现任务1.2.2编写Python程序监控Linux系统性能编写Python程序importreimporttime'''菜单函数'‘’defmenu():'''主函数'''defmain():'''获取CPU使用率的函数'''defget_cpu_usage():'''获取内存使用率的函数'''defget_mem_usage():'''获取网络接口收发数据量的函数'''defget_net_data():if__name__=="__main__":main()任务1.2使用Python提升系统自动化运维技能任务实现任务1.2.2编写Python程序监控Linux系统性能运行测试运行Python脚本

实际测试脚本任务1.2使用Python提升系统自动化运维技能任务1.1从Shell编程开始系统自动化运维任务1.3使用Python执行外部命令任务1.3使用Python执行外部命令任务说明01OPTION02OPTION03OPTION了解subprocess模块的基本用法掌握使用subprocess模块编程执行外部命令的方法编程实现批量检测主机在线状态04OPTION编写通用的外部命令执行函数任务1.3使用Python执行外部命令相关知识1.3.1subprocess模块简介subprocess模块替代Python内置的OS模块提供的调用外部进程的函数来运行和创建新的系统进程。subprocess模块可以用于执行外部命令,创建一个新的进程让其去执行其他程序。subprocess模块提供一些管理标准流和管道的工具,从而实现进程间的通信。任务1.3使用Python执行外部命令相关知识1.3.2subprocess模块的便利函数基本用法subprocess.run(args,*,stdin=None,input=None,stdout=None,stderr=None,capture_output=False,shell=False,cwd=None,timeout=None,check=False,encoding=None,errors=None,text=None,env=None,universal_newlines=None,**other_popen_kwargs)该函数运行由args参数指定的外部命令。该函数执行后会生成新进程,我们可以连接到新进程的输入、输出和错误处理管道上,发送和接收数据以及处理错误代码,获取进程的返回值。执行该函数,待命令执行完成后返回CompletedProcess对象。任务1.3使用Python执行外部命令相关知识1.3.3subprocess模块的Popen类构造函数Popen对象的方法Popen对象的属性Popen类的用法示例任务1.3使用Python执行外部命令任务实现任务1.3.1使用subprocess模块编程批量检测主机在线状态程序importsubprocess#定义颜色来区分主机在线状态,颜色格式:\033[显示方式;前景色;背景色mredFont="\033[1;31m"#红色greenFont="\033[1;32m"#绿色defautFont="\033[0m"#结束颜色格式的输出withopen("host_list","r")asf:forhostinf:#逐行读取文本文件中的主机

host=host.strip()#每行末尾有隐藏的换行符\n,使用strip()函数清除

foriinrange(3):result=subprocess.run(['ping','-c1','-W1',str(host)],stdout=subprocess.PIPE,check=False)ifresult.returncode==0:#判断返回码

print(greenFont+host+'主机'+defautFont+'正在运行')breakelse:ifi==2:#连续3次无法通信,则判定为停止状态

print(redFont+host+'主机'+defautFont+'停止运行')任务1.3使用Python执行外部命令任务实现任务1.3.1使用subprocess模块编程批量检测主机在线状态运行测试任务1.3使用Python执行外部命令任务实现任务1.3.2编写通用的外部命令执行函数importsubprocess'''定义执行外部命令的函数'''defrun_cmd(cmd):p=subprocess.Popen(cmd,shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)stdout,stderr=municate()#执行命令并返回结果

ifp.returncode!=0:#执行失败,以元组形式返回返回码和错误信息

returnp.returncode,stderrreturnp.returncode,stdout#执行成功,以元组形式返回返回码和输出结果任务1.3使用Python执行外部命令任务实现任务1.3.2编写通用的外部命令执行函数if__name__=="__main__":#测试上述函数

res=run_cmd(['piplist'])#获取的信息需要解码

ifres[0]!=0:print('未成功执行!')print(res[1].decode())else:print('执行结果:')print(res[1].decode())THANKSLinux系统自动化运维(Python版)(微课版)工业和信息化精品系列教材项目2

监控系统与调度运维任务能力CAPACITY要求了解系统信息监测功能,学会使用psutil库编程实现系统信息采集。了解文件系统更改监控机制,学会使用watchdog库编程实现文件系统更改监控。了解Web服务的响应指标,学会使用PycURL库编程实现Web服务监控。了解任务调度的概念,学会使用APScheduler库编程实现运维任务调度。任务2.2监控文件系统更改任务2.1采集系统信息和管理进程任务2.3监控Web服务任务2.4调度运维任务任务2.1采集系统信息和管理进程任务说明01OPTION02OPTION03OPTION了解psutil库有关系统信息的便利函数了解psutil库有关进程的便利函数和类编写基于psutil库采集系统信息的Python程序04OPTION05OPTION编写基于psutil库管理进程的Python程序掌握系统运维类Shell编程任务2.1采集系统信息和管理进程相关知识2.1.1了解psutil库psutil——processandsystemutilities等同UNIX命令行工具(ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等)安装psutil库pipinstallpsutilpsutil库便利函数——获取系统信息常量类——管理进程任务2.1采集系统信息和管理进程相关知识2.1.2系统信息相关函数CPU信息psutil.cpu_times()内存信息psutil.virtual_memory()磁盘信息psutil.disk_usage('/')网络信息_io_counters(pernic=True)其他系统信息psutil.boot_time()任务2.1采集系统信息和管理进程相关知识2.1.3进程管理功能进程相关的便利函数psutil.pids():返回当前运行的PID的有序列表。psutil.pid_exists(PID):检查指定的PID是否存在于当前进程列表中。psutil.wait_procs(procs,timeout=None,callback=None):返回进程列表。cess_iter(attrs=None,ad_value=None):返回一个包含Process对象的迭代器。进程相关的类

>>>p=psutil.Process()>>>()'python'任务2.1采集系统信息和管理进程任务实现任务2.1.1使用psutil库采集系统信息importpsutilimportsocket'''通用的字节转换函数'''defbytes2human(n):'''获取CPU信息'''defget_cpu_info():'''获取内存信息'''defget_memory_info():'''获取磁盘信息'''defget_disk_info():'''获取网络信息'''defget_net_info():'''汇集系统信息'''defgather_monitor_data():'''报告结果'''defreport():if__name__=='__main__':report()任务2.1采集系统信息和管理进程任务实现任务2.1.2使用psutil库实现进程管理importpsutilimportsys'''定义按进程名终止进程的函数'''defkill_proc_byname(proc_names):proc_list=psutil.pids()try:forpidinproc_list:#循环读取进程名,符合条件即终止相应的进程

forproc_nameinproc_names:#基于PID创建Process对象

p=psutil.Process(pid)#判断该Process对象的进程名是否为要终止的进程名

if()==proc_name:p.kill()print(f"已终止名称为{proc_name},PID为{pid}的进程!")exceptExceptionase:print(str(e))if__name__=='__main__':#从命令行参数列表中读取进程名

kill_proc_byname(sys.argv[1:])任务2.2监控文件系统更改任务2.1采集系统信息和管理进程任务2.3监控Web服务任务2.4调度运维任务任务2.1采集系统信息和管理进程任务说明01OPTION02OPTION03OPTION了解pyinotify库和文件系统更改监控的实现机制了解watchdog库及其基本用法使用pyinotify库编写文件系统更改监控程序04OPTION05OPTION使用watchdog库编写文件系统更改监控程序掌握系统运维类Shell编程任务2.1采集系统信息和管理进程相关知识2.1.1了解psutil库传统运维方式面临的挑战

效率低容易失误被动运维缺乏流程化和标准化的运维机制任务1.2使用Python提升系统自动化运维技能任务1.1从Shell编程开始系统自动化运维任务1.3使用Python执行外部命令任务1.2使用Python提升系统自动化运维技能任务说明01OPTION02OPTION03OPTION了解系统自动化运维与Python编程了解Python的模块、包和库的概念学会搭建Python开发环境04OPTION掌握使用Python编写系统运维程序的流程任务1.2使用Python提升系统自动化运维技能相关知识1.2.1Python简介Python语法简洁、清晰,具有丰富和强大的库。Python最初被设计用于编写自动化脚本。Python使用优雅的语法,让编写的程序易于阅读。Python是一种解释型的编程语言。Python是一种面向对象的语言。Python易于扩展。Python是高级编程语言。Python适用面广。任务1.2使用Python提升系统自动化运维技能相关知识1.2.2Python的模块、包与库模块(Module)用来从逻辑上组织Python代码,将相关的代码归到一个模块能让代码更好用、更易读。包(Package)定义了一个由模块和子包组成的Python程序执行环境。包本质上就是一个分层次的文件目录,包括若干模块和若干子包。库(Library)是借用自其他编程语言的概念,通常是指具有相关功能模块的集合。在Python中,库可以是模块的形式,也可以是包的形式,实际是一个具有特定功能的代码组合,库中可以包含包、模块和函数。任务2.2监控文件系统更改任务2.1采集系统信息和管理进程任务2.3监控Web服务任务2.4调度运维任务任务2.1采集系统信息和管理进程任务说明01OPTION02OPTION03OPTION了解pyinotify库和文件系统更改监控的实现机制了解watchdog库及其基本用法使用pyinotify库编写文件系统更改监控程序04OPTION使用watchdog库编写文件系统更改监控程序任务2.1采集系统信息和管理进程相关知识2.2.1了解pyinotify库安装pyinotify库pipinstallpyinotify测试pyinotify库(1)创建/test目录,在终端窗口中执行以下命令进行该目录更改的监控。(2)打开另一个终端窗口,在/test目录中创建一个名为newfile的文件。(3)切换回原终端窗口,观察其中显示的信息。<Eventdir=Falsemask=0x100maskname=IN_CREATname=newfilepath=/testpathname=/test/newfilewd=1><Eventdir=Falsemask=0x20maskname=IN_OPENname=newfilepath=/testpathname=/test/newfilewd=1>(4)测试完毕按<Ctrl>+<C>组合键退出监控状态。任务2.1采集系统信息和管理进程相关知识2.2.1了解pyinotify库pyinotify库的文件系统事件事件标志含义IN_ACCESS文件被访问IN_ATTRIB文件的元数据(属性)被修改,如文件的权限被修改IN_CLOSE文件被关闭,等同于IN_CLOSE_WRITE|IN_CLOSE_NOWRITEIN_CLOSE_WRITE可写文件被关闭IN_CLOSE_NOWRITE不可写文件被关闭IN_CREATE文件或目录在被监控目录中被创建IN_DELETE文件或目录在被监控目录中被删除IN_DELETE_SELF自删除,即一个可执行文件在执行时删除自己IN_MODIFY文件被修改IN_MOVE_SELF自移动,即一个可执行文件在执行时移动自己IN_MOVE文件被移动,等同于IN_MOVED_FROM|IN_MOVED_TOIN_MOVED_FROM文件或目录被移出被监控目录IN_MOVED_TO文件或目录被移入被监控目录IN_OPEN文件被打开IN_Q_OVERFLOW事件队列溢出。此事件不属于任何特定的监控项目IN_UNMOUNT宿主文件系统被卸载任务2.1采集系统信息和管理进程相关知识2.2.1了解pyinotify库pyinotify库的基本用法(1)创建一个监控管理器WatchManager对象。(2)添加需要监控的对象。可使用add_watch(path,mask,rec=True)方法。(3)创建一个事件通知器Notifier对象。(4)持续监听事件并进行处理。任务2.1采集系统信息和管理进程相关知识2.2.2了解watchdog库观察者(监控器)模型观察者(Observer)被监控对象事件处理器(EventHandler)任务2.1采集系统信息和管理进程相关知识2.2.2了解watchdog库watchdog库的API定义文件系统事件的类文件系统事件基类watchdog.events.FileSystemMovedEvent(FileSystemEvent)表示被监控对象发生更改时触发的文件系统事件。由该基类派生若干子类,表示特定类型的文件系统更改的文件系统事件。文件系统事件处理的类watchdog.events.FileSystemEventHandler是事件处理器的基类,用于处理事件。观察者的类watchdog.observers.Observer类用于定义观察者线程。任务2.1采集系统信息和管理进程相关知识2.2.2了解watchdog库安装watchdog库pipinstallwatchdogwatchdog库的基本用法(1)编写FileSystemEventHandler类的子类,重写相关的方法来定制事件处理器,以对发生的文件系统事件做出响应。(2)创建一个Observer对象作为观察者负责启动监控任务。(3)将事件处理器关联到被监控目录。(4)启动Observer线程,在不阻塞主线程的前提下等待事件生成,以便持续监控文件系统更改,并做出相应的响应。任务2.1采集系统信息和管理进程任务实现任务2.2.1基于pyinotify库编写文件系统更改监控程序importsysimportpyinotify'''定制事件处理类'''classEventHandler(pyinotify.ProcessEvent):#定制所需的事件处理函数

defprocess_IN_CREATE(self,event):defprocess_IN_DELETE(self,event):defprocess_IN_MODIFY(self,event):'''文件系统更改监控函数,参数path为要监控的文件或目录路径'''deffs_monitor(path):if__name__=='__main__':#被监控目录可以由命令行参数指定,如果不指定则监控当前目录

path=sys.argv[1]iflen(sys.argv)>1else'.'fs_monitor(path)任务2.1采集系统信息和管理进程任务实现任务2.2.2基于watchdog库编写文件系统更改监控程序通用的文件系统更改监控程序fromwatchdog.observersimportObserverfromwatchdog.eventsimportFileSystemEventHandlerimportsysimporttime'''定制事件处理器'''classFSEventHandler(FileSystemEventHandler):def__init__(self):FileSystemEventHandler.__init__(self)defon_moved(self,event):defon_created(self,event):defon_deleted(self,event):defon_modified(self,event):if__name__=="__main__":path=sys.argv[1]iflen(sys.argv)>1else'.'observer=Observer()event_handler=FSEventHandler()observer.schedule(event_handler,path,True)observer.start()try:whileTrue:time.sleep(1)exceptKeyboardInterrupt:observer.stop()observer.join()任务2.1采集系统信息和管理进程任务实现任务2.2.2基于watchdog库编写文件系统更改监控程序通用的文件系统更改监控程序if__name__=="__main__":path=sys.argv[1]iflen(sys.argv)>1else'.'observer=Observer()event_handler=FSEventHandler()observer.schedule(event_handler,path,True)observer.start()try:whileTrue:time.sleep(1)exceptKeyboardInterrupt:observer.stop()observer.join()任务2.1采集系统信息和管理进程任务实现任务2.2.2基于watchdog库编写文件系统更改监控程序监控特定文件类型的文件系统更改fromwatchdog.eventsimportPatternMatchingEventHandler…classFSEventHandler(PatternMatchingEventHandler):#定义初始化方法,需要兼顾其父类FileSystemEventHandlerdef__init__(self,patterns=None,ignore_patterns=None,ignore_directories=False,case_sensitive=False):super().__init__()self._patterns=patternsself._ignore_patterns=ignore_patternsself._ignore_directories=ignore_directoriesself._case_sensitive=case_sensitive…if__name__=="__main__":…#patterns参数指定匹配的模式,ignore_directories参数用于忽略目录

event_handler=FSEventHandler(patterns=["*.txt","*.py","*.html"],ignore_directories=True)…任务2.1采集系统信息和管理进程任务实现任务2.2.2基于watchdog库编写文件系统更改监控程序自动备份新上传的文件'''自定义事件处理器'''classFSEventHandler(FileSystemEventHandler):def__init__(self):FileSystemEventHandler.__init__(self)defon_created(self,event):ifnotevent.is_directory:bak_file(event.src_path)defon_modified(self,event):ifnotevent.is_directory:bak_file(event.src_path)'''备份文件的函数'''defbak_file(src):p=subprocess.Popen("cp"+src+"/bak/",shell=True,stdout=subprocess.PIPE)municate()ifp.returncode==0:print("备份上传文件:",src)#returncode==0表示运行成功任务2.2监控文件系统更改任务2.1采集系统信息和管理进程任务2.3监控Web服务任务2.4调度运维任务任务2.1采集系统信息和管理进程任务说明01OPTION02OPTION03OPTION了解PycURL库及其用途掌握PycURL库的基本用法使用PycURL库编写Web服务监控程序任务2.3监控Web服务相关知识2.3.1PycURL库简介PycURL库是用C语言编写的Python第三方库,是多协议文件传输库libcurl的Python接口。PycURL库可用于从Python程序中获取指定URL的响应对象,除了简单的提取操作之外,还实现了libcurl库的大部分功能。可以利用PycURL库对网站进行抓包分析,监测Web服务质量。任务2.3监控Web服务相关知识2.3.2PycURL库的基本用法安装PycURL库sudoaptinstalllibcurl4-gnutls-devsudoaptinstalllibghc-gnutls-devpipinstallpycurl任务2.3监控Web服务相关知识2.3.2PycURL库的基本用法使用PycURL库的API(1)创建Curl对象。c=pycurl.Curl()(2)使用Curl对象的setopt(option,value)方法设置Curl会话选项。(3)执行请求任务,使用perform()方法发起会话。(4)获取返回的信息,使用getinfo(option)方法从Curl会话中提取并返回信息,采用调用该方法时Python的默认编码来对返回的字符串数据进行解码。(5)执行close()方法关闭、回收Curl对象,并结束Curl会话。任务2.3监控Web服务任务实现基于PycURL库编写Web服务监控程序程序代码importosimportsysimportpycurlWeb_URL=""c=pycurl.Curl()c.setopt(pycurl.URL,Web_URL)#设置要连接的URL┄┄#打开一个文件用来存储返回的网页头部head_file=open(os.path.dirname(os.path.realpath(__file__))+"/head.txt","wb")c.setopt(pycurl.WRITEHEADER,head_file)#将返回的网页内容输出到空设备文件,以免其输出到控制台fnull=open('/dev/null','wb')c.setopt(pycurl.WRITEDATA,fnull)任务2.3监控Web服务任务实现基于PycURL库编写Web服务监控程序程序代码#发起会话以执行传输任务try:c.perform()exceptExceptionase:print("链接错误connecionerror:"+str(e))head_file.close()fnull.close()c.close()sys.exit()'''汇集返回的信息'''defgather_data():effective_url=c.getinfo(pycurl.EFFECTIVE_URL)┄┄任务2.3监控Web服务任务实现基于PycURL库编写Web服务监控程序程序代码'''输出报告'''defreport():data=gather_data()print("网页地址:%s"%(data["effective_url"]))print("HTTP状态码:%s"%(data["http_code"]))┄┄print("HTTP头部大小:%.2fMB"%(data["header_size"]/1204))print("下载内容长度:%.2fMB"%(data["content_length_download"]/1204))print("平均下载速度:%.2fMB/s"%(data["speed_download"]/1024))if__name__=='__main__':report()任务2.3监控Web服务任务实现基于PycURL库编写Web服务监控程序Web服务监测结果任务2.2监控文件系统更改任务2.1采集系统信息和管理进程任务2.3监控Web服务任务2.4调度运维任务任务2.4调度运维任务任务说明01OPTION02OPTION03OPTION了解APScheduler库的组件掌握APScheduler库的基本用法使用Cron服务调度运维任务04OPTION使用APScheduler库编写程序调度运维任务任务2.4调度运维任务相关知识2.4.1APScheduler库的组件触发器(Trigger)任务存储器(JobStore)执行器(Executor)调度器(Scheduler)任务2.4调度运维任务相关知识2.4.2APScheduler库的基本用法使用APScheduler库编写调度程序的基本步骤(1)根据应用场景选择合适的调度器、任务存储器、执行器和触发器(2)准备要调度的任务程序(3)创建一个调度器(4)添加一个调度任务(5)运行调度任务任务2.4调度运维任务相关知识2.4.2APScheduler库的基本用法简单的APScheduler库使用示例fromapscheduler.schedulers.blockingimportBlockingSchedulerfromdatetimeimportdatetime#定义要调度的任务程序defmyjob1():print("当前时间:%s"%datetime.now())defmyjob2():print("Hello!")#创建调度器scheduler=BlockingScheduler()#添加任务,每隔10秒执行一次myjob1()函数scheduler.add_job(myjob1,'interval',seconds=10)#添加任务,每分钟执行一次myjob2()函数scheduler.add_job(myjob2,'cron',minute='*')scheduler.start()任务2.4调度运维任务相关知识2.4.2APScheduler库的基本用法配置调度器fromapscheduler.schedulers.blockingimportBlockingSchedulerimportdatetimefromapscheduler.executors.poolimportThreadPoolExecutor,ProcessPoolExecutorfromtores.sqlalchemyimportSQLAlchemyJobStoredefmyjob(id='myjob'):print(id,'-->',datetime.datetime.now())#自定义任务存储器jobstores={'default':SQLAlchemyJobStore(url='sqlite:///jobs.sqlite')}#自定义执行器executors={'default':ThreadPoolExecutor(20),#最大线程数为20(默认为10)

'processpool':ProcessPoolExecutor(10)#进程池中最多有10个进程}任务2.4调度运维任务相关知识2.4.2APScheduler库的基本用法配置调度器#创建自定义的调度器scheduler=BlockingScheduler(jobstores=jobstores,executors=executors,job_defaults=job_defaults)scheduler.add_job(myjob,args=['job_interval',],id='job_interval',trigger='interval',seconds=5,replace_existing=True)try:scheduler.start()except(KeyboardInterrupt,SystemExit):exit()任务2.4调度运维任务相关知识2.4.2APScheduler库的基本用法调度程序事件#定义事件监听器defmy_listener(event):ifevent.exception:print('任务运行出错:')else:print('任务正常运行:')#将事件监听器附加到调度器,监听任务执行完毕和任务出错事件scheduler.add_listener(my_listener,EVENT_JOB_EXECUTED|EVENT_JOB_ERROR)任务2.4调度运维任务任务实现任务2.4.1使用Cron服务调度运维任务(1)准备要执行的Python程序。(2)执行crontab-e命令,输入以下代码。*/5****/autoom/02sysmon/venv/bin/python/autoom/02sysmon/webmon_bypycurl.py>>/test/test.log2>&1(3)执行crontab-l命令检查Cron配置文件的内容。(4)打开/test/test.log文件,查看内容以验证运维任务的调度。任务2.4调度运维任务任务实现任务2.4.2基于APScheduler库编程调度运维任务fromdatetimeimportdatetimeimportosfromapscheduler.schedulers.blockingimportBlockingScheduler#从sysinfo_bypsutil.py文件导入report()函数fromsysinfo_bypsutilimportreport'''定义要执行的任务'''defmonjob():print('监测时间:%s'%datetime.now())report()任务2.4调度运维任务任务实现任务2.4.2基于APScheduler库编程调度运维任务if__name__=='__main__':scheduler=BlockingScheduler()scheduler.add_job(monjob,'interval',minutes=5)#给出强制退出的组合键,兼顾Linux和Windows平台

print('按Ctrl+{0}键退出'.format('Break'if=='nt'else'C'))#先运行一次定义的任务,再启动调度器

monjob()try:scheduler.start()except(KeyboardInterrupt,SystemExit):print('已退出!')exit()THANKSLinux系统自动化运维(Python版)(微课版)工业和信息化精品系列教材项目2

处理文件内容与配置文件能力CAPACITY要求了解文件内容处理,学会文件内容处理的Python编程。了解配置文件的常用格式,掌握配置文件操作的Python编程。了解模板,学会使用Jinja2模板编程处理文本文件。学会使用内置模块编程比对文件和目录内容。任务3.2操作配置文件任务3.1解析和处理文件内容任务3.3使用模板高效处理文本文件任务3.4比对文件和目录内容任务3.1解析和处理文件内容任务说明01OPTION02OPTION03OPTION了解字符串操作方法了解文本文件的读写方法掌握编码和解码的基本知识和实现方法04OPTION05OPTION掌握正则表达式的使用方法学会编程解析和处理文件内容任务3.1解析和处理文件内容相关知识3.1.1字符串及其操作字符串的形式字符串运算符字符串格式化Python内置的字符串函数任务3.1解析和处理文件内容相关知识3.1.2文本文件的读写文件操作的基本流程(1)打开文件(2)对打开的文件进行操作(3)关闭文件文本文件的读取read():一次性读取全部文件内容readline():每次读取一行的内容,包括末尾的换行符(\n)readlines():一次性读取全部内容,以列表形式返回结果。文本文件的写入write():将字符串写入文件中,返回的是写入的字符串长度。writelines():将一个字符串列表写入文件任务3.1解析和处理文件内容相关知识3.1.3编码和解码编码标准ASCIIUTF-8GBKPython脚本文件的编码格式Python3编码默认使用的是UTF-8使用PyCharm创建脚本文件默认采用UTF-8格式编码任务3.1解析和处理文件内容相关知识3.1.3编码和解码读写文本文件的编码格式在Linux系统中使用Python打开文本文件时,默认编码是UTF-8在Windows系统中文版中使用Python打开文本文件时,默认编码是GBKfile=open('文本文件','r',encoding='utf-8')字符串编码转换编码使用字符串对象的encode()方法实现encode(encoding='UTF-8',errors='strict’)解码使用字节码对象的decode()方法实现bytes.decode(encoding='utf-8',errors='strict')任务3.1解析和处理文件内容相关知识3.1.4正则表达式正则表达式的构成普通字符元字符正则表达式类型基本正则表达式(BasicRegularExpression,BRE)扩展正则表达式(ExtendedRegularExpression,ERE)Perl正则表达式(PerlRegularExpression,PRE)任务3.1解析和处理文件内容相关知识3.1.4正则表达式使用内置的re模块处理正则表达式匹配方法——findall()

re.findall(pattern,string,flags=0)替换方法——sub()

re.sub(pattern,repl,string,count=0,flags=0)分割方法——split()re.split(pattern,string[,maxsplit=0,flags=0])编译正则表达式的方法re模块提供compile()方法来编译正则表达式,生成一个正则表达式对象供findall()、match()、search()等方法使用任务3.1解析和处理文件内容任务实现任务3.1.1统计用户账户withopen("/etc/passwd",mode="r")asf:#打开/etc/passwd文件

counts={"system":0,"regular":0} #计数用字典

regulars=[] #普通用户列表

foriteminf:li=item.strip().split(":") #将读取的每行数据去除换行符再分割为列表

user=dict( #使用字典保存用户账户的主要信息

name=li[0],uid=li[2],gid=li[3],home=li[5],shell=li[6])uid=int(user["uid"])#通过UID判断系统用户和普通用户

ifuidinrange(1000)oruid==65534:counts["system"]+=1elifuid>=1000:counts["regular"]+=1regulars.append(user)任务3.1解析和处理文件内容任务实现任务3.1.1统计用户账户print("系统用户数:",counts["system"])print("普通用户数:",counts["regular"])print("普通用户列表")print("-"*80)#格式化输出用户列表print(format("用户名","<20"),format("UID","^6"),format("GID","^6"),format("主目录","<20"),format("Shell","<30"))foruserinregulars:print(format(user["name"],"<20"),format(user["uid"],">6"),format(user["gid"],">6"),format(user["home"],"<20"),format(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论