Linux系統(tǒng)自動化運維(Python版)(微課版)-項目2_第1頁
Linux系統(tǒng)自動化運維(Python版)(微課版)-項目2_第2頁
Linux系統(tǒng)自動化運維(Python版)(微課版)-項目2_第3頁
Linux系統(tǒng)自動化運維(Python版)(微課版)-項目2_第4頁
Linux系統(tǒng)自動化運維(Python版)(微課版)-項目2_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

Linux系統(tǒng)自動化運維(Python版)(微課版)工業(yè)和信息化精品系列教材項目2

監(jiān)控系統(tǒng)與調(diào)度運維任務(wù)人民郵電出版社能力CAPACITY要求了解系統(tǒng)信息監(jiān)測功能,學(xué)會使用psutil庫編程實現(xiàn)系統(tǒng)信息采集。了解文件系統(tǒng)更改監(jiān)控機制,學(xué)會使用watchdog庫編程實現(xiàn)文件系統(tǒng)更改監(jiān)控。了解Web服務(wù)的響應(yīng)指標(biāo),學(xué)會使用PycURL庫編程實現(xiàn)Web服務(wù)監(jiān)控。了解任務(wù)調(diào)度的概念,學(xué)會使用APScheduler庫編程實現(xiàn)運維任務(wù)調(diào)度。任務(wù)2.2監(jiān)控文件系統(tǒng)更改任務(wù)2.1采集系統(tǒng)信息和管理進(jìn)程任務(wù)2.3監(jiān)控Web服務(wù)任務(wù)2.4調(diào)度運維任務(wù)任務(wù)2.1采集系統(tǒng)信息和管理進(jìn)程任務(wù)說明01OPTION02OPTION03OPTION了解psutil庫有關(guān)系統(tǒng)信息的便利函數(shù)了解psutil庫有關(guān)進(jìn)程的便利函數(shù)和類編寫基于psutil庫采集系統(tǒng)信息的Python程序04OPTION編寫基于psutil庫管理進(jìn)程的Python程序任務(wù)2.1采集系統(tǒng)信息和管理進(jìn)程相關(guān)知識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庫便利函數(shù)——獲取系統(tǒng)信息常量類——管理進(jìn)程任務(wù)2.1采集系統(tǒng)信息和管理進(jìn)程相關(guān)知識2.1.2系統(tǒng)信息相關(guān)函數(shù)CPU信息psutil.cpu_times()內(nèi)存信息psutil.virtual_memory()磁盤信息psutil.disk_usage('/')網(wǎng)絡(luò)信息_io_counters(pernic=True)其他系統(tǒng)信息psutil.boot_time()任務(wù)2.1采集系統(tǒng)信息和管理進(jìn)程相關(guān)知識2.1.3進(jìn)程管理功能進(jìn)程相關(guān)的便利函數(shù)psutil.pids():返回當(dāng)前運行的PID的有序列表。psutil.pid_exists(PID):檢查指定的PID是否存在于當(dāng)前進(jìn)程列表中。psutil.wait_procs(procs,timeout=None,callback=None):返回進(jìn)程列表。cess_iter(attrs=None,ad_value=None):返回一個包含Process對象的迭代器。進(jìn)程相關(guān)的類

>>>p=psutil.Process()>>>()'python'任務(wù)2.1采集系統(tǒng)信息和管理進(jìn)程任務(wù)實現(xiàn)任務(wù)2.1.1使用psutil庫采集系統(tǒng)信息importpsutilimportsocket'''通用的字節(jié)轉(zhuǎn)換函數(shù)'''defbytes2human(n):'''獲取CPU信息'''defget_cpu_info():'''獲取內(nèi)存信息'''defget_memory_info():'''獲取磁盤信息'''defget_disk_info():'''獲取網(wǎng)絡(luò)信息'''defget_net_info():'''匯集系統(tǒng)信息'''defgather_monitor_data():'''報告結(jié)果'''defreport():if__name__=='__main__':report()任務(wù)2.1采集系統(tǒng)信息和管理進(jìn)程任務(wù)實現(xiàn)任務(wù)2.1.2使用psutil庫實現(xiàn)進(jìn)程管理importpsutilimportsys'''定義按進(jìn)程名終止進(jìn)程的函數(shù)'''defkill_proc_byname(proc_names):proc_list=psutil.pids()try:forpidinproc_list:#循環(huán)讀取進(jìn)程名,符合條件即終止相應(yīng)的進(jìn)程

forproc_nameinproc_names:#基于PID創(chuàng)建Process對象

p=psutil.Process(pid)#判斷該Process對象的進(jìn)程名是否為要終止的進(jìn)程名

if()==proc_name:p.kill()print(f"已終止名稱為{proc_name},PID為{pid}的進(jìn)程!")exceptExceptionase:print(str(e))if__name__=='__main__':#從命令行參數(shù)列表中讀取進(jìn)程名

kill_proc_byname(sys.argv[1:])任務(wù)2.2監(jiān)控文件系統(tǒng)更改任務(wù)2.1采集系統(tǒng)信息和管理進(jìn)程任務(wù)2.3監(jiān)控Web服務(wù)任務(wù)2.4調(diào)度運維任務(wù)任務(wù)2.1采集系統(tǒng)信息和管理進(jìn)程任務(wù)說明01OPTION02OPTION03OPTION了解pyinotify庫和文件系統(tǒng)更改監(jiān)控的實現(xiàn)機制了解watchdog庫及其基本用法使用pyinotify庫編寫文件系統(tǒng)更改監(jiān)控程序04OPTION使用watchdog庫編寫文件系統(tǒng)更改監(jiān)控程序任務(wù)2.1采集系統(tǒng)信息和管理進(jìn)程相關(guān)知識2.2.1了解pyinotify庫安裝pyinotify庫pipinstallpyinotify測試pyinotify庫(1)創(chuàng)建/test目錄,在終端窗口中執(zhí)行以下命令進(jìn)行該目錄更改的監(jiān)控。(2)打開另一個終端窗口,在/test目錄中創(chuàng)建一個名為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>組合鍵退出監(jiān)控狀態(tài)。任務(wù)2.1采集系統(tǒng)信息和管理進(jìn)程相關(guān)知識2.2.1了解pyinotify庫pyinotify庫的文件系統(tǒng)事件事件標(biāo)志含義IN_ACCESS文件被訪問IN_ATTRIB文件的元數(shù)據(jù)(屬性)被修改,如文件的權(quán)限被修改IN_CLOSE文件被關(guān)閉,等同于IN_CLOSE_WRITE|IN_CLOSE_NOWRITEIN_CLOSE_WRITE可寫文件被關(guān)閉IN_CLOSE_NOWRITE不可寫文件被關(guān)閉IN_CREATE文件或目錄在被監(jiān)控目錄中被創(chuàng)建IN_DELETE文件或目錄在被監(jiān)控目錄中被刪除IN_DELETE_SELF自刪除,即一個可執(zhí)行文件在執(zhí)行時刪除自己IN_MODIFY文件被修改IN_MOVE_SELF自移動,即一個可執(zhí)行文件在執(zhí)行時移動自己IN_MOVE文件被移動,等同于IN_MOVED_FROM|IN_MOVED_TOIN_MOVED_FROM文件或目錄被移出被監(jiān)控目錄IN_MOVED_TO文件或目錄被移入被監(jiān)控目錄IN_OPEN文件被打開IN_Q_OVERFLOW事件隊列溢出。此事件不屬于任何特定的監(jiān)控項目IN_UNMOUNT宿主文件系統(tǒng)被卸載任務(wù)2.1采集系統(tǒng)信息和管理進(jìn)程相關(guān)知識2.2.1了解pyinotify庫pyinotify庫的基本用法(1)創(chuàng)建一個監(jiān)控管理器WatchManager對象。(2)添加需要監(jiān)控的對象??墒褂胊dd_watch(path,mask,rec=True)方法。(3)創(chuàng)建一個事件通知器Notifier對象。(4)持續(xù)監(jiān)聽事件并進(jìn)行處理。任務(wù)2.1采集系統(tǒng)信息和管理進(jìn)程相關(guān)知識2.2.2了解watchdog庫觀察者(監(jiān)控器)模型觀察者(Observer)被監(jiān)控對象事件處理器(EventHandler)任務(wù)2.1采集系統(tǒng)信息和管理進(jìn)程相關(guān)知識2.2.2了解watchdog庫watchdog庫的API定義文件系統(tǒng)事件的類文件系統(tǒng)事件基類watchdog.events.FileSystemMovedEvent(FileSystemEvent)表示被監(jiān)控對象發(fā)生更改時觸發(fā)的文件系統(tǒng)事件。由該基類派生若干子類,表示特定類型的文件系統(tǒng)更改的文件系統(tǒng)事件。文件系統(tǒng)事件處理的類watchdog.events.FileSystemEventHandler是事件處理器的基類,用于處理事件。觀察者的類watchdog.observers.Observer類用于定義觀察者線程。任務(wù)2.1采集系統(tǒng)信息和管理進(jìn)程相關(guān)知識2.2.2了解watchdog庫安裝watchdog庫pipinstallwatchdogwatchdog庫的基本用法(1)編寫FileSystemEventHandler類的子類,重寫相關(guān)的方法來定制事件處理器,以對發(fā)生的文件系統(tǒng)事件做出響應(yīng)。(2)創(chuàng)建一個Observer對象作為觀察者負(fù)責(zé)啟動監(jiān)控任務(wù)。(3)將事件處理器關(guān)聯(lián)到被監(jiān)控目錄。(4)啟動Observer線程,在不阻塞主線程的前提下等待事件生成,以便持續(xù)監(jiān)控文件系統(tǒng)更改,并做出相應(yīng)的響應(yīng)。任務(wù)2.1采集系統(tǒng)信息和管理進(jìn)程任務(wù)實現(xiàn)任務(wù)2.2.1基于pyinotify庫編寫文件系統(tǒng)更改監(jiān)控程序importsysimportpyinotify'''定制事件處理類'''classEventHandler(pyinotify.ProcessEvent):#定制所需的事件處理函數(shù)

defprocess_IN_CREATE(self,event):defprocess_IN_DELETE(self,event):defprocess_IN_MODIFY(self,event):'''文件系統(tǒng)更改監(jiān)控函數(shù),參數(shù)path為要監(jiān)控的文件或目錄路徑'''deffs_monitor(path):if__name__=='__main__':#被監(jiān)控目錄可以由命令行參數(shù)指定,如果不指定則監(jiān)控當(dāng)前目錄

path=sys.argv[1]iflen(sys.argv)>1else'.'fs_monitor(path)任務(wù)2.1采集系統(tǒng)信息和管理進(jìn)程任務(wù)實現(xiàn)任務(wù)2.2.2基于watchdog庫編寫文件系統(tǒng)更改監(jiān)控程序通用的文件系統(tǒng)更改監(jiān)控程序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()任務(wù)2.1采集系統(tǒng)信息和管理進(jìn)程任務(wù)實現(xiàn)任務(wù)2.2.2基于watchdog庫編寫文件系統(tǒng)更改監(jiān)控程序通用的文件系統(tǒng)更改監(jiān)控程序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()任務(wù)2.1采集系統(tǒng)信息和管理進(jìn)程任務(wù)實現(xiàn)任務(wù)2.2.2基于watchdog庫編寫文件系統(tǒng)更改監(jiān)控程序監(jiān)控特定文件類型的文件系統(tǒng)更改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參數(shù)指定匹配的模式,ignore_directories參數(shù)用于忽略目錄

event_handler=FSEventHandler(patterns=["*.txt","*.py","*.html"],ignore_directories=True)…任務(wù)2.1采集系統(tǒng)信息和管理進(jìn)程任務(wù)實現(xiàn)任務(wù)2.2.2基于watchdog庫編寫文件系統(tǒng)更改監(jiān)控程序自動備份新上傳的文件'''自定義事件處理器'''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)'''備份文件的函數(shù)'''defbak_file(src):p=subprocess.Popen("cp"+src+"/bak/",shell=True,stdout=subprocess.PIPE)municate()ifp.returncode==0:print("備份上傳文件:",src)#returncode==0表示運行成功任務(wù)2.2監(jiān)控文件系統(tǒng)更改任務(wù)2.1采集系統(tǒng)信息和管理進(jìn)程任務(wù)2.3監(jiān)控Web服務(wù)任務(wù)2.4調(diào)度運維任務(wù)任務(wù)2.1采集系統(tǒng)信息和管理進(jìn)程任務(wù)說明01OPTION02OPTION03OPTION了解PycURL庫及其用途掌握PycURL庫的基本用法使用PycURL庫編寫Web服務(wù)監(jiān)控程序任務(wù)2.3監(jiān)控Web服務(wù)相關(guān)知識2.3.1PycURL庫簡介PycURL庫是用C語言編寫的Python第三方庫,是多協(xié)議文件傳輸庫libcurl的Python接口。PycURL庫可用于從Python程序中獲取指定URL的響應(yīng)對象,除了簡單的提取操作之外,還實現(xiàn)了libcurl庫的大部分功能??梢岳肞ycURL庫對網(wǎng)站進(jìn)行抓包分析,監(jiān)測Web服務(wù)質(zhì)量。任務(wù)2.3監(jiān)控Web服務(wù)相關(guān)知識2.3.2PycURL庫的基本用法安裝PycURL庫sudoaptinstalllibcurl4-gnutls-devsudoaptinstalllibghc-gnutls-devpipinstallpycurl任務(wù)2.3監(jiān)控Web服務(wù)相關(guān)知識2.3.2PycURL庫的基本用法使用PycURL庫的API(1)創(chuàng)建Curl對象。c=pycurl.Curl()(2)使用Curl對象的setopt(option,value)方法設(shè)置Curl會話選項。(3)執(zhí)行請求任務(wù),使用perform()方法發(fā)起會話。(4)獲取返回的信息,使用getinfo(option)方法從Curl會話中提取并返回信息,采用調(diào)用該方法時Python的默認(rèn)編碼來對返回的字符串?dāng)?shù)據(jù)進(jìn)行解碼。(5)執(zhí)行close()方法關(guān)閉、回收Curl對象,并結(jié)束Curl會話。任務(wù)2.3監(jiān)控Web服務(wù)任務(wù)實現(xiàn)基于PycURL庫編寫Web服務(wù)監(jiān)控程序程序代碼importosimportsysimportpycurlWeb_URL=""c=pycurl.Curl()c.setopt(pycurl.URL,Web_URL)#設(shè)置要連接的URL┄┄#打開一個文件用來存儲返回的網(wǎng)頁頭部head_file=open(os.path.dirname(os.path.realpath(__file__))+"/head.txt","wb")c.setopt(pycurl.WRITEHEADER,head_file)#將返回的網(wǎng)頁內(nèi)容輸出到空設(shè)備文件,以免其輸出到控制臺fnull=open('/dev/null','wb')c.setopt(pycurl.WRITEDATA,fnull)任務(wù)2.3監(jiān)控Web服務(wù)任務(wù)實現(xiàn)基于PycURL庫編寫Web服務(wù)監(jiān)控程序程序代碼#發(fā)起會話以執(zhí)行傳輸任務(wù)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)┄┄任務(wù)2.3監(jiān)控Web服務(wù)任務(wù)實現(xiàn)基于PycURL庫編寫Web服務(wù)監(jiān)控程序程序代碼'''輸出報告'''defreport():data=gather_data()print("網(wǎng)頁地址:%s"%(data["effective_url"]))print("HTTP狀態(tài)碼:%s"%(data["http_code"]))┄┄print("HTTP頭部大?。?.2fMB"%(data["header_size"]/1204))print("下載內(nèi)容長度:%.2fMB"%(data["content_length_download"]/1204))print("平均下載速度:%.2fMB/s"%(data["speed_download"]/1024))if__name__=='__main__':report()任務(wù)2.3監(jiān)控Web服務(wù)任務(wù)實現(xiàn)基于PycURL庫編寫Web服務(wù)監(jiān)控程序Web服務(wù)監(jiān)測結(jié)果任務(wù)2.2監(jiān)控文件系統(tǒng)更改任務(wù)2.1采集系統(tǒng)信息和管理進(jìn)程任務(wù)2.3監(jiān)控Web服務(wù)任務(wù)2.4調(diào)度運維任務(wù)任務(wù)2.4調(diào)度運維任務(wù)任務(wù)說明01OPTION02OPTION03OPTION了解APScheduler庫的組件掌握APScheduler庫的基本用法使用Cron服務(wù)調(diào)度運維任務(wù)04OPTION使用APScheduler庫編寫程序調(diào)度運維任務(wù)任務(wù)2.4調(diào)度運維任務(wù)相關(guān)知識2.4.1APScheduler庫的組件觸發(fā)器(Trigger)任務(wù)存儲器(JobStore)執(zhí)行器(Executor)調(diào)度器(Scheduler)任務(wù)2.4調(diào)度運維任務(wù)相關(guān)知識2.4.2APScheduler庫的基本用法使用APScheduler庫編寫調(diào)度程序的基本步驟(1)根據(jù)應(yīng)用場景選擇合適的調(diào)度器、任務(wù)存儲器、執(zhí)行器和觸發(fā)器(2)準(zhǔn)備要調(diào)度的任務(wù)程序(3)創(chuàng)建一個調(diào)度器(4)添加一個調(diào)度任務(wù)(5)運行調(diào)度任務(wù)任務(wù)2.4調(diào)度運維任務(wù)相關(guān)知識2.4.2APScheduler庫的基本用法簡單的APScheduler庫使用示例fromapscheduler.schedulers.blockingimportBlockingSchedulerfromdatetimeimportdatetime#定義要調(diào)度的任務(wù)程序defmyjob1():print("當(dāng)前時間:%s"%datetime.now())defmyjob2():print("Hello!")#創(chuàng)建調(diào)度器scheduler=BlockingScheduler()#添加任務(wù),每隔10秒執(zhí)行一次myjob1()函數(shù)scheduler.add_job(myjob1,'interval',seconds=10)#添加任務(wù),每分鐘執(zhí)行一次myjob2()函數(shù)scheduler.add_job(myjob2,'cron',minute='*')scheduler.start()任務(wù)2.4調(diào)度運維任務(wù)相關(guān)知識2.4.2APScheduler庫的基本用法配置調(diào)度器fromapscheduler.schedulers.blockingimportBlockingSchedulerimportdatetimefromapscheduler.executors.poolimportThreadPoolExecutor,ProcessPoolExecutorfromtores.sqlalchemyimportSQLAlchemyJobStoredefmyjob(id='myjob'):print(id,'-->',datetime.datetime.now())#自定義任務(wù)存儲器jobstores={'default':SQLAlchemyJobStore(url='sqlite:///jobs.sqlite')}#自定義執(zhí)行器executors={'default':ThreadPoolExecutor(20),#最大線程數(shù)為20(默認(rèn)為10)

'processpool':ProcessPoolExecutor(10)#進(jìn)程池中最多有10個進(jìn)程}任務(wù)2.4調(diào)度運維任務(wù)相關(guān)知識2.4.2APScheduler庫的基本用法配置調(diào)度器#創(chuàng)建自定義的調(diào)度器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()任務(wù)2.4調(diào)度運維任務(wù)相關(guān)知識2.4.2APScheduler庫的基本

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論