python監測linux程序

2021-10-10 21:09:10 字數 2563 閱讀 7793

很多時候我們都需要監測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是具體的程序號,這個命令列印...