2012-11-10 79 views
5

擊:檢查後,運行過程中,如果沒有運行擊:檢查後,運行過程中,如果沒有運行

嗨, 我的要求是,如果內存緩存服務器關閉以任何理由在生產,我想重新啓動它立即

通常我將開始內存緩存服務器以這種方式與用戶與複製沒有人如下所示

分佈式緩存-u無人-l 192.168.1.1 -m 2076 -x 192.168.1.2 -v

所以爲了這個,我加在crontab中一個條目這樣

(crontab -e命令)

*/5 * * * * /home/memcached/memcached_autostart.sh 

memcached_autostart.sh

#!/bin/bash 
ps -eaf | grep 11211 | grep memcached 
# if not found - equals to 1, start it 
if [ $? -eq 1 ] 
then 
memcached -u nobody -l 192.168.1.1 -m 2076 -x 192.168.1.2 -v 
else 
echo "eq 0 - memcache running - do nothing" 
fi 

我的問題是內部memcached_autostart.sh,爲自動啓動memcached服務器,上述腳本是否有問題?

或者

如果實現這一目標的任何更好的方法(而不是使用cron作業) 請分享您的經驗。

回答

3

是問題是ps -eaf | grep 11211 | grep memcached我認爲是進程ID,它總是變化對每一個開始,所以你應該做的是ps -ef | grep memcached

希望幫助

3

而不是從cron運行它您可能需要創建一個適當的init腳本。示例請參見/etc/init.d/。另外,如果你這樣做,大多數系統已經具有處理大部分工作的功能,例如檢查啓動,重新啓動,停止,檢查已經運行的進程等。

大多數守護腳本將pid保存到特殊文件(例如/var/run/foo),然後您可以檢查該文件的存在。

對於Ubuntu,您可以看到/etc/init.d/skeleton例如腳本,您可以複製它。

+0

我覺得還有一個叫'daemon'功能在'/ etc/init.d/functions'中。這也照顧了runfile.pid。因此,從自動啓動腳本獲取函數文件並通過守護進程函數調用您的程序是一個好主意。 – anishsane