當前位置:首頁 » 編程語言 » pythonlinux監控

pythonlinux監控

發布時間: 2022-06-18 04:37:37

『壹』 python linux怎麼操作

1. os 模塊

1.1. os模塊的exec方法族

Python的exec系統方法同Unix的exec系統調用是一致的。這些方法適用
於在子進程中調用外部程序的情況,因為外部程序會替換當前進程的代碼,不會返回。( 這個看了點 help(os) --> search
"exec" 的相關介紹,但是沒太搞明白咋使用)

1.2. os模塊的system方法

system方法會創建子進程運行外部程序,方法只返回外部程序的運行結果。這個方法比較適用於外部程序沒有輸出結果的情況。

[python]
view plain

>>> import os
>>> os.system("echo \"Hello World\"") # 直接使用os.system調用一個echo命令
Hello World ——————> 列印命令結果
0 ——————> What's this ? 返回值?
>>> val = os.system("ls -al | grep \"log\" ") # 使用val接收返回值
-rw-r--r-- 1 root root 6030829 Dec 31 15:14 log ——————> 此時只列印了命令結果
>>> print val
0 ——————> 注意,此時命令正常運行時,返回值是0
>>> val = os.system("ls -al | grep \"log1\" ")
>>> print val
256 ——————> 使用os.system調用一個沒有返回結果的命令,返回值為256~
>>>

注意:上面說了,此方法脂肪會外部程序的結果,也就是os.system的結果,所以如果你想接收命令的返回值,接著向下看~

1.3. os模塊的popen方法

當需要得到外部程序的輸出結果時,本方法非常有用,返回一個類文件對象,調用該對象的read()或readlines()方法可以讀取輸出內容。比如使用urllib調用Web API時,需要對得到的數據進行處理。os.popen(cmd) 要得到命令的輸出內容,只需再調用下read()或readlines()等 如a=os.popen(cmd).read()

[python]
view plain

>>> os.popen('ls -lt') # 調用os.popen(cmd)並不能得到我們想要的結果
<open file 'ls -lt ', mode 'r' at 0xb7585ee8>
>>> print os.popen('ls -lt').read() # 調用read()方法可以得到命令的結果
total 6064
-rwxr-xr-x 1 long long 23 Jan 5 21:00 hello.sh
-rw-r--r-- 1 long long 147 Jan 5 20:26 Makefile
drwxr-xr-x 3 long long 4096 Jan 2 19:37 test
-rw-r--r-- 1 root root 6030829 Dec 31 15:14 log
drwxr-xr-x 2 long long 4096 Dec 28 09:36 pip_build_long
drwx------ 2 Debian-gdm Debian-gdm 4096 Dec 23 19:08 pulse-gylJ5EL24GU9
drwx------ 2 long long 4096 Jan 1 1970 orbit-long
>>> val = os.popen('ls -lt').read() # 使用變數可以接收命令返回值
>>> if "log" in val: # 我們可以使用in來判斷返回值中有木有一個字元串
... print "Haha,there is the log"
... else:
... print "No,not happy"
...
Haha,there is the log

2. commands 模塊

使用commands模塊的getoutput方法,這種方法同popend的區別在於popen返回的是一個類文件對象,而本方法將外部程序的輸出結果當作字元串返回,很多情況下用起來要更方便些。
主要方法:

* commands.getstatusoutput(cmd) 返回(status, output)
* commands.getoutput(cmd) 只返回輸出結果
* commands.getstatus(file) 返回ls -ld file的執行結果字元串,調用了getoutput,不建議使用此方法

[python]
view plain

long@zhouyl:/tmp/tests$ python
Python 2.7.3 (default, Jan 2 2013, 16:53:07)
[GCC 4.7.2] on linux2
Type "help", "right", "credits" or "license" for more information.
>>> import commands
>>> commands.getstatusoutput('ls -lt') # 返回(status, output)
(0, 'total 5900\n-rwxr-xr-x 1 long long 23 Jan 5 21:34 hello.sh\n-rw-r--r-- 1 long long 147 Jan 5 21:34 Makefile\n-rw-r--r-- 1 long long 6030829 Jan 5 21:34 log')
>>> commands.getoutput('ls -lt') # 返回命令的輸出結果(貌似和Shell命令的輸出格式不同哈~)
'total 5900\n-rwxr-xr-x 1 long long 23 Jan 5 21:34 hello.sh\n-rw-r--r-- 1 long long 147 Jan 5 21:34 Makefile\n-rw-r--r-- 1 long long 6030829 Jan 5 21:34 log'
>>> commands.getstatus('log') # 調用commands.getoutput中的命令對'log'文件進行相同的操作
'-rw-r--r-- 1 long long 6030829 Jan 5 21:34 log'
>>>

3. subprocess模塊

根據Python官方文檔說明,subprocess模塊用於取代上面這些模塊。有一個用Python實現的並行ssh工具—mssh,代碼很簡短,不過很有意思,它在線程中調用subprocess啟動子進程來幹活。

[python]
view plain

>>> from subprocess import call
>>> call(["ls", "-l"])

subprocess與system相比的優勢是它更靈活(你可以得到標准輸出,標准錯誤,「真正」的狀態代碼,更好的錯誤處理,等..)。我認為使用os.system已過時,或即將過時。

『貳』 linux運用shell腳本監控所有進程佔用cpu和內存到指定值就報警輸出內容

命名行下輸入python
然後寫個死循環:
while True:
print "i want to exaust cpu"
試試唄,水平有限。
應該會提高,但不知道能提到多少。

『叄』 使用python,在linux上監控遠程windows的CPU、硬碟、內存使用率

你需要安裝wmic,它實現了linux下能使用wmi,安裝以後就可以用了,下面是例子。
import wmi_client_wrapper as wmi
wmic = wmi.WmiClientWrapper(
username="Administrator",
password="password",
host="192.168.1.149",
)
output = wmic.query("SELECT * FROM Win32_Processor")

『肆』 在linux下,python怎麼才能抓到網卡上的所有TCP數據包

Ethereal 自帶許多協議的 decoder,簡單,易用,基於winpcap的一個開源的軟體.但是它的架構並不靈活,如何你要加入一個自己定義的的解碼器,得去修改 Ethereal的代碼,再重新編譯,很煩瑣.對於一般的明文 協議,沒有什麼問題,但是對於加密協議,比如網路游戲,客戶端程序一般會在剛連接上的時候,發送一個隨機密鑰,而後的報文都會用這個密鑰進行加密,如此. 要想破解,得要有一個可編程的抓包器.
libpcap是一個不錯的選擇,但是對於抓包這樣需要反復進行」試 驗->修改」這個過程的操作,c 語言顯然不是明智的選擇.
Python提供了幾個libpcapbind。在windows平台上,你需要先安裝winpcap,如果你已經安裝了Ethereal非常好用
一個規范的抓包過程
import pcap
import dpkt
pc=pcap.pcap() #注,參數可為網卡名,如eth0
pc.setfilter('tcp port 80') #設置監聽過濾器
for ptime,pdata in pc: #ptime為收到時間,pdata為收到數據
print ptime,pdata #...
對抓到的乙太網V2數據包(raw packet)進行解包
p=dpkt.ethernet.Ethernet(pdata)
if p.data.__class__.__name__=='IP':
ip='%d.%d.%d.%d'%tuple(map(ord,list(p.data.dst)))
if p.data.data.__class__.__name__=='TCP':
if data.dport==80:
print p.data.data.data # by gashero
一些顯示參數
nrecv,ndrop,nifdrop=pc.stats()
返回的元組中,第一個參數為接收到的數據包,(by gashero)第二個參數為被核心丟棄的數據包。

『伍』 linux下如何監聽進程

一、supervise

Supervise是daemontools的一個工具,可以用來監控管理unix下的應用程序運行情況,在應用程序出現異常時,supervise可以重新啟動指定程序。

使用:
mkdir test
cd test
vim run 寫入希望執行的操作
supervise test (注意這里是的參數是run文件上層的文件夾,改變run的為可執行 chmod +x run)

二、monit

monit是一個小型的開放源碼工具來管理和監控Unix系統。Monit可以自動維護進程,及時避免進程異常退出等產生的問題。

系統: monit可以監控問題的發生,包括進程狀態、系統cpu負載、內存佔用情況等,例如當apache服務的cpu負載以及內存閘弄情況過高時候,它會重啟apache服務。
進程: monit可以監控守護進程,包括系統進程。例如當某個進行down掉,它會自動恢復重啟該進程。
文件系統:Monit可以監控本地文件、目錄、文件系統的變化,包括時間戳、校驗值、大小的變化。例如,可以監控文件sha1以及md5的值,來監控文件是否發生變化。
網路:monit可以監控網路連接,支持TCP、UDP、Unix domain sockets以及HTTP、SMTP等。
定時腳本:monit可以用來定時測試程序和腳本,獲取程序輸出結果,進而判斷是否成功或其他情況。
安裝:

sudo apt-get install monit
編輯配置:
sudo vim /etc/monit/monitrc
啟動、停止、重啟:
sudo /etc/init.d/monit start
sudo /etc/init.d/monit stop
sudo /etc/init.d/monit restart
設置頁面監控狀態:
set httpd port 2812 and
allow 0.0.0.0/0.0.0.0
allow localhost
增加監控:
需要注意的是,這里需要添加start和stop,缺一個都是不行的

1.根據程序名稱來監控

check process test with MATCHING test.py
start program = "/home/yxd/test.py"
stop program = "xxxxx"
2.根據pid監控

check process apache with pidfile /var/run/httpd.pid
start program = "/etc/init.d/rcWebServer.sh start https"
stop program = "/etc/init.d/rcWebServer.sh stop https"
if changed pid then aler
參考:用monit監控系統關鍵進程
supervisord

Supervisor是一個C/S系統,它可以在類unix操作系統讓用戶來監視和控制後台服務進程的數量。它是由python編寫的,常用於進程異常退出的重啟保護。
安裝:

pip install supervisor
查看配置文件:

echo_supervisord_conf
從該命令的結果中,可以看到各個模塊的配置信息。
創建配置文件:

echo_supervisord_conf > /etc/supervisord.conf
配置應用:

[program:test]
command=python /root/test_supervisor.py
process_name=%(program_name)s
stdout_logfile=/root/test.log
stderr_logfile=/root/test.log
保存,啟動:

/usr/bin/supervisord -c /etc/supervisord.conf

『陸』 python監控linux下啟動了多少進程

任何一種編程語言,啟動進程和關閉進程都是跟操作系統相關的操作,python中與操作系統打交道的話,推薦使用os模塊。

os.system() 函數可以啟動一個進程,執行完之後返回狀態碼。

os.fork() 復制一個進程,如果是子進程返回0,如果是父進程返回子進程的pid,使用這個函數的時候,建議你學習一下linux編程的知識。
os.popen 以管道的方式創建進程。
os.spawnl 也可以創建進程,並能指定環境變數。

os.kill(pid, sig) 關閉一個進程,pid是進程號,sig是信號。與fork配合使用,例如你剛才用fork創建了一個子進程,它的pid是11990, 那麼調用
os.kill( 11990, signal.CTRL_BREAK_EVENT)
就以ctrl+c的方式殺死了這個進程。

另外還有一個模塊multiprocessing,這個模塊封裝了很多創建進程和進程間通信的操作,可以讓你發揮多核的威力。

『柒』 Shell 已經很強大了,為什麼在 Linux 操作還需要 Python,Ruby

很多的東西shell是做不了的。相對而言 Python可能更加強大吧。而且現在的運維和5年前大不相同了,以前會個Linux考個ce感覺很厲害,但是現在呢 這些可能是一個基礎。運維對技術的要求高了。DEVOPS的出現重新定義了運維,用戶python可以寫自動化運維工作,做anslibe,做監控等等,這些都是需要Python來進行支持的。學Python是為了更好的運維。這個就是語言的強大之處。但是運維還是很有前景的,需要的是不斷的努力去學習,提高自己的能力。做運維當然也是要從基層做起了,學好基層,學好Linux,多練習,多實戰。新人可以參考下《Linux就該這樣學》多練習,好好學,加油!!Linux是運維的基礎,有了基礎往高層次python是必須的。

『捌』 Python 在 Linux 系統運維中都有哪些應用

本人主要用shell,結合工作經驗,給出如下常用功能:
1.製作定時任務,可以獲得系統狀態,然後截取系統狀態,發送至故障監控平台或簡訊平台,實現故障的自動預警。
2.提取數據,形成文本,處理文本,得到規格化的數據,提供給相關部門使用。
3.製作shell互動式菜單,提供給其他運維值班人員使用,用以手工監控系統各種狀態
4.版本升級、系統變更等操作需要使用。

『玖』 Python如何監測Linux隱藏進程

我理解你說的隱藏進程可能是類似惡意軟體隱藏自身的進程。
python可以通過讀取/proc的結果來對比ps的結果來找到和監視這些隱藏的進程。

『拾』 如何在 Linux 環境下利用 Python 監聽當前系統的滑鼠事件

inux下好辦,所有的設備都當作文件處理了,在『/dev/input』目錄下找到滑鼠對應設備文件讀出來即可。
滑鼠設備文件是『/dev/input/mice』,讀3個位元組,三個位元組的值分別是『Button類型』,『X的相對位移』,『Y的相對位移』。取Button的低3位(Button & 0x07)。 0x01 -> LeftButtonDown, 0x02 -> RightButtonDown.
import struct
mou = open( "/dev/input/mice", "rb" );
def m_event():
m = mou.read(3)
b = ord( m[0] )
bl = b & 0x1
bm = ( b & 0x4 ) > 0
br = ( b & 0x2 ) > 0
x,y = struct.unpack( "bb", m[1:] )
print "Left:%d, Middle: %d, Right: %d, x: %d, y: %d\n" % (bl,bm,br, x, y)

while( 1 ):
m_event()
mou.close();

熱點內容
36腳本大廳作者 發布:2025-02-06 14:55:53 瀏覽:407
買電腦配送伺服器嗎 發布:2025-02-06 14:54:58 瀏覽:242
伺服器怎麼刪除資源 發布:2025-02-06 14:36:14 瀏覽:671
安卓如何設置桌面返回鍵 發布:2025-02-06 13:58:15 瀏覽:48
bi可視化php 發布:2025-02-06 13:50:15 瀏覽:932
shell寫腳本文件 發布:2025-02-06 13:47:32 瀏覽:231
健身器材腳本 發布:2025-02-06 13:46:36 瀏覽:856
怎麼從手機里卸載存儲卡 發布:2025-02-06 13:35:04 瀏覽:644
誅仙青雲志2ftp 發布:2025-02-06 13:34:48 瀏覽:34
mill91編程 發布:2025-02-06 13:10:27 瀏覽:294