2009年1月7日 星期三

嘗試用短短的shell script去寫Watchdog

最近有時候會遇到vncserver的process出問題
慘劇分為兩種

第一種目前我還沒有找到解決方式
ps -ef|grep vnc
process還活著,可是整個遠端X Window呈現灰色
只能操作一個悽涼的X游標

一種是標準的整個process就乾淨地死掉了
ps -ef|grep vnc
那個process就是掛點了,沒有process殘留著
試著做個像watchdog的shell小程式
放進crontab去每隔一段時間就執行

#!/bin/ksh

TEST=`ps -ef| grep Xvnc | grep -v grep | wc -l`

if [ $TEST = 1 ]
then
#VNC server is still alive.
exit
else
#It's dead.
echo "Vncserver is dead. Restart the VNC server" >>chk_vnc.log
vncserver :6
xhost +
date +%Y/%m/%d_%T>>chk_vnc.log
fi

這個程式很簡單的檢查vnc的process還在不在
如果不在了就重新啟動vncserver
至於要是process還在記憶體裡,卻已經異常的情形
目前還沒有找到方法,等找到會在改善這隻小程式

附註
有許多server程式其實都使用了個寫pid檔案的小技巧
像vncserver就在$HOME/.vnc/目錄下
會產生一個pid檔案
比方說主機叫myserver用5806這個port的話
檔名就叫myserver:6.pid
檔名的內容就是pid
要把這個server程式下掉時
其實是去把這個檔記載的pid讀出來然後kill掉
下面這小段程式目前還沒想到後續要做什麼就先擱著

#!/bin/ksh
#check if the pidfile exists
if [ -e $HOME/.vnc/myserver:6.pid ]; then
echo "myserver:6.pid exists"
else
echo "myserver:6.pid does not exist"
fi


要是有高手路過,歡迎指點一下啊!!!

沒有留言:

張貼留言