很多時候我們都需要監測linux伺服器中的乙個或多個程序是否正常執行,並能通過郵件的方式通知系統管理員。使用python編寫乙個監測程序是否執行正常的指令碼是很方面和高效的,那麼我們就使用python中的subprocess模組並結合linux命令來簡單實現乙個監測指令碼。
subprocess的主要作用就是啟動乙個程序並與之通訊。 這裡我們主要用subprocess中的popen類。
subprocess.popen(args, bufsize=0, executable=none, stdin=none, stdout=none, stderr=none, preexec_fn=none, close_fds=false, shell=false, cwd=none, env=none, universal_newlines=false, startupinfo=none, creationflags=0)
引數args可以是字串或者序列型別(如:list,元組),用於指定程序的可執行檔案及其引數。如果是序列型別,第乙個元素通常是可執行檔案的路徑。我們也可以顯式的使用executeable引數來指定可執行檔案的路徑。
引數stdin, stdout, stderr分別表示程式的標準輸入、輸出、錯誤控制代碼。他們可以是pipe,檔案描述符或檔案物件,也可以設定為none,表示從父程序繼承。
如果引數shell設為true,程式將通過shell來執行。
引數env是字典型別,用於指定子程序的環境變數。如果env = none,子程序的環境變數將從父程序中繼承。
subprocess.pipe,在建立popen物件時,subprocess.pipe可以初始化stdin, stdout或stderr引數。表示與子程序通訊的標準流。
subprocess.stdout,建立popen物件時,用於初始化stderr引數,表示將錯誤通過標準輸出流輸出。
建立檔案check.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import
subprocess,os
,time
#檢測程序
defcheck
(findkey
):p1
=subprocess
.popen
(['ps'
,'-ef'
],stdout
=subprocess
.pipe)p2
=subprocess
.popen
(['grep'
,findkey
],stdin=p1
.stdout
,stdout
=subprocess
.pipe)r
=p2.stdout
.readlines
()flag
=false
#print r
# print len(r)
iflen(r
)>0:
forvinr
:restr
="python /path/to/"
+findkeyifv
.find
(restr)!=
-1:flag
=true
break
else
:flag
=false
return
flag
#執行程序
defrun
(cmd
,out
):realcmd
='nohup python /path/to/'
+cmd
+' > '
+out
+' &'os.
system
(realcmd)if
__name__
=='__main__'
:while
true:if
check
('test.py')is
false
:run
('test.py'
,'/tmp/test_log.txt'
)#do something
time
.sleep(3
)time
.sleep
(3600
)#間隔1小時檢測一次
linux中的計畫任務是使用crontab來配置的,在linux命令列下,鍵入以下命令:
.py上面**說明每天的8點開始執行監測指令碼。
(完)
監測Linux程序的實時IO情況
block dump linux 核心裡提供了乙個 block dump 引數用來把 block 讀寫 write read 狀況 dump 到日誌裡,這樣可以通過 dmesg 命令來檢視,具體操作步驟是 sysctl vm.block dump 1 or echo 1 proc sys vm bl...
Linux基礎 檔案操作 程序 監測命令
4 命令 1 檔案操作 普通 目錄 建立 touch filename.name mkdir dirname 刪除 rm filename.name 空目錄 rmdir 非空目錄 rm r 檢視 cat more less head tail ls cat filename.name 將檔案中的內容...
Linux下實現指令碼監測特定程序占用記憶體情況
記憶體洩露是c c 程式設計師經常需要面對的問題,除了有效地經常查詢出記憶體洩露的位置外,在嵌入式的開發中,還經常需要確定自己寫的程式是否存在記憶體洩露的情況 linux系統下,我們可以利用以下命令來獲取特定程序的運 況 cat proc pid status 其中pid是具體的程序號,這個命令列印...