[Linux] 使用 bash shell 監測某個 daemon 的執行緒數量
最近需要用 bash shell 寫一個小程式,來監視某隻 daemon 的執行緒數量是否有減少~
問題的起源是因為這隻 daemon 的某個執行緒會突然掛掉,
可是整個 daemon 還是會繼續執行,只是有部分功能失效了…
在還沒找到掛掉的原因之前,可以做的一個補救就是在看門狗程式中,
如果發現執行緒數量不如預期時,就將 daemon 重新啟動~~
(聽起來很瞎吧~不過看門狗還真的是很常見的東西 :P)
首先,要如何查看執行緒的資訊呢?可以用 ps 加上 -T 的參數來查看~
例如下面我們想看 rsyslogd 的所有執行緒情形,
可以看到有 4 個執行緒,PID 都是 1608,但 SPID 也就是執行緒 ID 是不一樣的:
假設我們想在 rsyslogd 的執行緒數量少於 4 的時候,就自動重新啟動它的話,
可以寫成如下的 check_thread_num.sh:
# Define the process name
process_name=rsyslogd
# Get minimum number of threads from command line parameters
process_min_threads=$1
# Calculate number of threads for the given process name
num_threads=`ps -e -T -f | grep “${process_name}“ | grep -v “grep” | wc -l`
# Restart process when thread count is less than expected
if [ ${num_threads} -lt ${process_min_threads} ]; then
echo “Need to restart ${process_name} since current thread num ${num_threads} is less than ${process_min_threads}“
fi
執行這個 shell 程式的語法如下:
執行結果如下,當指定的最小執行緒數量小於等於 4 的時候,
因為 rsyslogd 的目前執行緒有 4 根,因此程式沒有檢查出問題。
當指定的最小執行緒數量大於 4 的時候,就會檢查出問題,並且顯示要重新啟動的訊息~