簡單程序監控程式

2021-10-21 04:19:21 字數 3859 閱讀 6984

執行指令碼

參考文章

作業題目:寫乙個shell指令碼來進行程序的死活監控

作業描述:此shell指令碼能檢查配置檔案中記錄的程序是否在系統中執行。如果在系統中執行則顯示程序id(pid),如果不在執行則顯示 down 文字。

配置檔案(check_procs.conf):

systemd

smbd

nmbd

#logd

sshd

指令碼命名為check_proc.sh, 執行指令碼後的輸出結果:

systemd: 1 5241 31842

smbd: down

nmbd: down

sshd: 5025 31840 31857

要求:題目的意圖很明顯,就是讓我們讀入配置檔案,然後挨個判斷檔案中記錄的程序是否在系統中執行,執行則給出 pid,否則顯示 down。根據輸入和輸出結果可以看出,注釋掉的程序是不用判斷的,直接略過。

核心的功能就是三步,讀取檔案、跳過注釋、判斷程序,最後將功能合理封裝為函式執行即可。

在編寫**之前,有乙個非常重要的注意事項,shell中的變數賦值是不能有空格的。比如我們要將給變數 a 賦值為5,應該寫為a=5,而不能是a = 5。雖然加了空格會更美觀,但是**就不能按照預期執行了,所以賦值等號兩邊一定不要加空格!

判斷程序是程式最核心的功能,我們可以先進行程序判斷,再將其他的功能加上。

使用非常典型的通過grep獲取程序id的方法,判斷systemd這個程序是否在執行。

program=

"systemd"

# 程序名稱

#獲取程序pid,為空則程序未啟動

pid=

`ps -ef |

grep $program |

grep -v grep

|awk''`

if["$"==""]

then

echo

"$: down"

else

echo -ne "$: "

# echo預設換行,-ne表示當前輸出不換行

echo

$fi

方便起見,我們就將檔案放在 shell 指令碼的同級目錄下。新建配置檔案check_procs.conf,將上面的配置檔案示例全部寫入

在指令碼中編寫判斷檔案是否存在的**

filename=

"check_procs.conf"

# 檔名

base_path=

$(cd `dirname $0`;

pwd)

# 獲取當前目錄if[

! -e "$/$"

]# 判斷當前目錄下檔案是否存在

then

echo

"檔案不存在或無法讀取"

exit 0

fi

讀取檔案,按每一行進行判斷,line為變數,表示每一行的內容

判斷當前行第乙個字元是否為#,如果是則當前行全部是注釋,忽略即可

cat

$filename

|while

read line # 讀取檔案,按行處理

doif

["$"

=="#"

]# 第乙個字元為 『#』

then

# 此處編寫處理語句

fidone

可以看到,當前這個注釋判斷十分簡單,僅僅是將第乙個字元為 # 的內容全部忽略

對於 」注釋在行內「 、」多行注釋「 等這樣的內容是不能判斷的,還有待學習優化。

shell 中使用者自定義的函式不需要像 c 一樣指明型別,函式返回值可以用return來返回, return後跟乙個數值,範圍為 0-255。如果不用 return,將以最後一條命令執行結果作為返回值。

有一點要注意的是,所有函式在使用前必須定義。所以說,應該將自定義函式放在指令碼的開頭部分,這樣函式就可以正常使用了。

filename=

"check_prog.conf"

program=

""# program為變數,用來接收引數

# 讀取檔案

getfile(

)/$"

]then

echo

"檔案不存在或無法讀取"

exit 0

fi}# 跳過注釋

crossnote()"

=="#"

]then

return 1 # 當前行為注釋,返回1fi}

# 判斷程序

judgeprogress()'

` if

["$"

==""

]then

echo

"$: down"

else

echo -ne "$: "

echo$fi

}

編寫主函式,首先讀取檔案,然後每行都直接去掉注釋,再判斷程序是否在執行。

# 主函式

main(

)main

#! /bin/bash

# 用於實現程序監控的shell指令碼

filename=

"check_procs.conf"

program=

""# 讀取檔案

getfile(

)/$"

]then

echo

"檔案不存在或無法讀取"

exit 0

fi}# 跳過注釋

crossnote()"

=="#"

]then

return 1

fi}# 判斷程序

judgeprogress()'

` if

["$"

==""

]then

echo

"$: down"

else

echo -ne "$: "

echo$fi

}# 主函式

main(

)main

如果在執行指令碼時遇到了錯誤,請參考這篇文章進行解決 shell指令碼使用常見問題說明

我們在當前目錄下輸入ll命令,確認配置檔案已經存在

然後在終端中輸入執行指令碼的命令

./check_proc.sh
回車即可看到最終的執行結果

linux常用命令

vim編輯器的常用技巧

shell指令碼使用常見問題說明

shell 函式

kill -9 ps -ef|grep cpu|grep -v grep|awk ''命令解析

簡單程序監控

以前做過atm機專案,除了最基本的邏輯功能,比如取款,查詢!轉賬等,雖然這些很重要,但是有更重要的乙個事情,那就是監控,對atm執行程式的監控,對於atm狀態的監控,以及對於atm硬體的監控。這些都是實時的,需要把這些資訊發回給銀行伺服器系統,這樣銀行才好進行維護。銀行伺服器這段會根據狀態把故障級別...

用Python寫個程序監控程式

有個應用程式不是很穩定,又暫時找到具體問題,只知道出現錯誤時日誌檔案會反映出來.該應用定時更新日誌目錄,有兩個日誌檔案 fromclient.log 記錄接收請求,fromserver.log記錄接收服務端返回.出現問題時一般是fromclient.log日誌在更新,但是fromserver.log...

用Python寫個程序監控程式

有個應用程式不是很穩定,又暫時找到具體問題,只知道出現錯誤時日誌檔案會反映出來.該應用定時更新日誌目錄,有兩個日誌檔案 fromclient.log 記錄接收請求,fromserver.log記錄接收服務端返回.出現問題時一般是fromclient.log日誌在更新,但是fromserver.log...