要让这个包能够在 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 脚本:
文章来源于领测软件测试网 https://www.ltesting.net/