">在Windows平台上运行后台进程需要运行Windows服务。而要运行Windows服务,你就必须有能够感知Windows服务的程序。Bash脚本无法感知Windows服务,许多控制台程序
同样也不能。而且,将这些程序
转变为Windows服务也不可行。
没有附加的程序,想把控制台程序作为服务来运行是非常复杂的。Microsoft在其Resource Toolkit产品中提供了一个程序,可以将控制台程序转变为Windows服务。但遗憾的是,Resource Toolkit并不是免费的午餐。
但是,开源程序XYNTService却为我们提供了一个免费的方案,借助该程序,管理员可以定义执行控制台程序和及其设置。XYNTService程序是一个Windows服务,它通过读取设置文件来获悉执行哪些程序。
本文摘自最新出版的“Open Source For Windows Administrators”一书。在Code Project网站可以下载XYNTService程序(用户下载源代码和程序时需要进行注册)。
下载的压缩包内包含一个名为XYNTService.exe的可执行文件。将此文件复制到准备作为XYNTService程序目录的目录内,然后执行XYNTService.exe -i命令即可安装该服务。执行XYNTService.exe –u可移除该服务。
当作为Windows服务安装XYNTService程序时,切记要以特定的用户来运行该服务。因为一些控制台程序可能需要读取用户环境变量或文件,而本地系统帐户不具备这些属性。
在启动XYNTService时,程序会在其所在的目录内查找XYNTService.ini文件。下面是配置文件的一个实例:
[Settings]
ServiceName = XYNTService
ProcCount = 2
CheckProcess = 30
[Process0]
CommandLine =
c:\bin\unison.exe -socket 8118
WorkingDir = c:\
PauseStart = 1000
PauseEnd = 1000
UserInterface = No
Restart = Yes
[Process1]
CommandLine = C:\j2sdk1.4.1
05\bin\java.exe -ms1m -cp . scache
WorkingDir = c:\bin\scache
PauseStart = 1000
PauseEnd = 1000
UserInterface = No
Restart = Yes
在上面的配置文件实例中,有两个主要的类型区域:Settings和其它区域(Process0和Process1)。Settings区域涵盖有关XYNTService程序的所有主要的全局定义。其它区域则定义XYNTService运行时启动的每个进程。Settings区域设置项目如下:
ServiceName:用来设置XYNTService服务的名称。通过修改此名称,管理员可以安装多个XYNTService服务。
ProcCount:设定启动进程的数目。该项设置主要针对XYNTService程序,依据该值来确定处理ProcessX部分的最大进程数。在本例中,该值为2,表示Process0和Process1部分必然存在。
CheckProcess:该值指定XYNTService检查启动进程是否处于活动状态的时间间隔。如果该值为0,则表示不检查;为其它值时,进程会被重启。如果该值有效并且ProcessX区域的Restart项设置为允许重启,当发生进程死亡时,XYNTService将重新启动该进程。请谨慎设置该选项,因为如果设置不正确,进程将不停的死亡和重启,从而可能导致计算机根本无法工作。