要讓這個包能夠在 Fedora Core 4 上干凈地構建,必須對包的 C 源代碼稍做調整。請用文本編輯器,把 src/error.h 的第 6 行從extern int errno;改成#include <errno.h>。下面是使用ed的處理方法:
[root@fcvm package]#cd admin/daemontools-0.76[root@fcvm daemontools-0.76]#ed src/error.h5956extern int errno;c#include <errno.h>.wq596 [root@fcvm daemontools-0.76]#
現在可以完成安裝了:
[root@fcvm daemontools-0.76]#package/installLinking ./src/* into ./compile... Compiling everything in ./compile...[...]Creating /service... Adding svscanboot to inittab... init should start svscan now. [root@fcvm daemontools-0.76]#ps -ef | grep svsroot 21160 1 0 16:09 ? 00:00:00 /bin/sh /command/svsca nboot root 21162 21160 0 16:09 ? 00:00:00 svscan /service root 21173 20051 0 16:10 pts/1 00:00:00 grep svs [root@fcvm daemontools-0.76]#
daemontools提供了叫作svscan的守護進程,它負責管理服務集合。每個服務都由 /service 目錄中的一個目錄代表,所以需要在這里為 CruiseControl 服務創建一個目錄。對于 /service 中的每個子目錄,svscan都啟動一個子進程,運行supervise程序。
supervise是負責管理 CruiseControl 這樣的獨立服務的程序。它創建子進程,運行服務子目錄中的run(例如 /service/cruisecontrol/run),從而啟動服務。如果子進程中止,supervise會重新啟動它。supervise也可以向子進程發送信號,停止或重新啟動子進程。
daemontools還提供了兩個機制,負責處理它管理的服務的日志記錄。首先,叫作readproctitle的程序捕捉寫入標準錯誤流(在 Java 世界中,是System.err)的輸出并把輸出拷貝到一個小緩沖區中,這個小緩沖區是ps命令顯示的進程標題的一部分:
[root@fcvm daemontools-0.76]#ps -ef | grep proctitleroot 25040 25037 0 20:58 ? 00:00:00 readproctitle service errors: .............................................................. ...................................................................... ...................................................................... ...................................................................... ...................................................................... .......................................................... root 25047 24006 0 20:59 pts/1 00:00:00 grep proctitle [root@fcvm daemontools-0.76]#
在啟動時,緩沖區被初始化為包含點號,但是在出現錯誤時就被錯誤信息替代。這個機制對于少量信息(例如關鍵錯誤信息)來說很好。但是緩沖區尺寸小造成它不適合更大數量的日志信息,而且記錄的信息不能保存到磁盤也使得難以分析一段時間內的性能。daemontools提供了第二種機制 ——multilog程序,它負責這種大量日志。第二種機制在命令行參數輸出的指令控制下,把自己標準輸入中的行寫入日志文件。它包含對日志輪轉的控制,日志輪轉可以保持定量的日志信息,以使存儲空間不會耗盡。例如,multilog /home/cruise/log這個簡單的命令就可以把信息記錄到 /home/cruise/log 目錄中的文件,當日志文件的尺寸達到 99,999 個字節時就輪轉日志文件,并保持 10 個舊的日志文件。
multilog也由supervise管理,就像其他服務一樣。在svsccan發現的每個目錄中,它都會查找叫作 log 的子目錄,并創建一個supervise進程來管理這個目錄下run腳本的執行。它還安排一個管道,把主服務的標準輸出作為日志進程的標準輸入。
那么,要讓daemontools管理 CruiseControl,需要做什么呢?必須為這個服務和它的multilog伙伴創建目錄結構。還必須創建它們各自的run腳本,并為日志文件創建目錄。開始時,把服務目錄命名為 .cruisecontrol。前導點號會讓svscan忽略這個目錄,從而可以在第一次啟動服務之前進行設置:
[cruise@fcvm ~]$mkdir -p log/cruisecontrol[cruise@fcvm ~]$su -Password:[enter root password][root@fcvm ~]#cd /service[root@fcvm service]#mkdir .cruisecontrol[root@fcvm service]#cd .cruisecontrol[root@fcvm .cruisecontrol]#mkdir log[root@fcvm .cruisecontrol]#
然后,創建叫作 env 的目錄。要用這個目錄的內容設置 CruiseControl 的環境變量以及它要啟動的其他進程。在這里要確保JAVA_HOME有合適的值。在這里還要設置將要使用的構建工具需要的環境變量,例如MAVEN_HOME。
[root@fcvm .cruisecontrol]#mkdir env[root@fcvm .cruisecontrol]#cd env[root@fcvm env]#echo /usr/lib/jvm/java >JAVA_HOME[root@fcvm env]#echo /home/cruise/pkg/maven-1.0.2 >MAVEN_HOME[root@fcvm env]#lsJAVA_HOME MAVEN_HOME [root@fcvm env]#cd ..[root@fcvm .cruisecontrol]#
清單 2 顯示了 /service/cruisecontrol/run 腳本:
文章來源于領測軟件測試網 http://www.kjueaiud.com/