很多服務器端設計者,很少會考慮到服務器永久存活或熱替換的問題,貌似真的很少
其中永久存活最大的理論支持就是,我們如何真正的保證一組服務器持續的存在,即便宕機?
其實沒有人能保證自己寫的代碼那么完美無瑕,因為它的存在就是必須去崩潰,必須暴露更多的錯誤才能更加完美無瑕,所以除了自己有大量的測試代碼外,其實對於程序本身的測試很多是無法達到的,那么我們就需要更多的外部支持,那么在實際運營中,最好的就是Daemon這樣的系統。
1、什么是Daemon
其實Daemon是一種進程守護者(守護進程),他保護你的系統免於遭受外部或異常錯誤而導致的崩潰,並在最短的時間內使其迅速恢復的一種機制或系統。
當然我在這里可不是教你怎么去寫一種Daemon,因為對很多團隊,那個成本很沒必要(我們有更省錢的做法)。
那就是 http://libslack.org/ 的自制軟件Daemon,它將自動保護任意進程,並保證程序持續穩定運行,直到你將其KILL或Stop掉,前提自然是要關閉掉Daemon本身。
2、安裝Daemon
首先直接從地址:http://libslack.org/daemon/download/daemon-0.6.4.tar.gz 中下載Daemon的最新源碼。
然后上傳至Linux服務器
tar -xvf daemon-0.6.4.tar.gz
cd daemon-0.6.4
注意:在這一步是不可以配置Daemon的安裝路徑的,它將被默認安裝至 /usr/local/bin 中,但會創建全局快捷方式,即可直接使用 daemon來運行程序。
./config
make -j8
make install-daemon
注意:這一步是為了安裝Daemon的配置文件 默認被安裝至 /etc/daemon.conf
make install-daemon-conf
3、配置Daemon以及參數說明
其實Daemon本身的參數是可以直接放入 /etc/daemon.conf 中的,那么基本上配置文件使用起來是非常容易的。
打開遠端的daemon.conf
其配置文件格式為
配置名稱(配置名稱與參數列表間,使用空格分隔) 參數列表(多參數使用 英文字母 逗號分隔),例如:
test_server respwan
參數說明(部分):
-h, --help - 打印幫助信息
-V, --version - 打印版本信息
-v, --verbose[=level] - 設置冗余級別
-d, --debug[=level] - 設置調試級別
-C, --config=path - 指定特殊的配置文件路徑,默認為:/etc/daemon.conf
-N, --noconfig - 將不讀取任何配置文件信息即不讀取 /etc/daemon.conf
-n, --name=name - 配置項目的名稱,將載入目標名稱參數信息
-X, --command=cmd - 定義特殊的后綴參數,例如需要參數啟動的話
-D, --chdir=path - 改變運行目錄
-m, --umask=umask - 改變目標執行程序的MASK
-U, --unsafe - 運行無安全狀態執行程序
-S, --safe - 運行安全執行程序
-c, --core - 生成核心文件,用於調試
-r, --respawn - 當程序關閉時,是否重新啟動程序
-f, --foreground - 前台運行程序
-p, --pty[=noecho] - Allocate a pseudo terminal for the client
-l, --errlog=spec - 定義DAEMON的目標錯誤日志位置
-b, --dbglog=spec - 調試日志位置
-o, --output=spec - 輸出運行程序的日志
-O, --stdout=spec - 輸出運行程序的輸出
-E, --stderr=spec - 輸出運行程序的錯誤日志
--running - 檢測此名稱的程序是否已經運行
--restart - 重新啟動此程序名稱程序
--stop - 結束此名稱的程序
4、開始使用Daemon
使用時,首先配置目標程序的參數,默認情況下,會添加參數 respawn 用於檢測當程序關閉時重新啟動程序,例如daemon.conf中增加此選項
test_server respwan,chdir=/home/test_server
例如此時我要啟動test_server那么,直接在shell中輸入
daemon --name=test_server /home/test_server/test_server
此進程將被守護,直到整個運行周期完成。
此處啟動的是位於:/home/test_server 下的 test_server 程序
5、應用場合以及擴展探索
此系統非常適合應用於需要強力保護的程序,如配合其他異常捕捉系統,將可以很好的保證整個服務器的運行以及崩潰BUG的修復情況。
也可以通過其他外部程序,控制或監控daemon的運行情況,可以合理的控制整個系統的開啟以及結束,太棒了這東西