Linux系统自动化运维(Python版)(微课版)-项目2_第1页
Linux系统自动化运维(Python版)(微课版)-项目2_第2页
Linux系统自动化运维(Python版)(微课版)-项目2_第3页
Linux系统自动化运维(Python版)(微课版)-项目2_第4页
Linux系统自动化运维(Python版)(微课版)-项目2_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

Linux系统自动化运维(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程序04OPTION编写基于psutil库管理进程的Python程序任务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库编写文件系统更改监控程序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库的基本

温馨提示

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

评论

0/150

提交评论