執行指令碼
參考文章
作業題目:寫乙個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...