我如何运行Atlassian Fisheye作为Windows服务?

根据官方安装指南,Fisheye是在命令行中启动的,不适用于没有用户login的服务器环境。 有人知道超越INSTSRV / SRVANY的好方法吗?

假设这个文档指的是你使用的版本,它看起来像本地运行,因为Windows服务仍然不在产品中,使用SRVANY是最好的select。

如果您发现鱼眼失败并exception结束,SRVANY将不会重新启动。 非吸收服务pipe理器 (NSSM)将重启它。 NSSM作为一个免费(公共领域,我相信)替代function。

您可以使用命令行“sc”(在Windows XP和更新版本的Windows中)创build一个服务来代替searchINSTSRV。 在sc的命令行帮助中描述了最好的语法,您可以通过执行sc create /?来获得该语法sc create /? 。 “sc”有一个奇怪的命令行语法 – 一定要在等号后加空格(即“binPath = c:…”)。

一个很好的方法是使用Tanuki Software的Java Service Wrapper。 鱼眼的例子可以在这里find。

我使用上面提到的服务包装,但为了完整起见,值得知道的是,您可以在“任务计划程序”中运行FishEye作为任务。 我尝试了这种技术,发现它非常成功。 我configuration我的任务运行“在启动时”和“每5分钟”的设置“不要开始任务,如果它已经运行”选中。

这里是一个封assembly置文件的例子,我在Windows Server 2008 R2上运行Fisheye 2.6.3。 这个文件与示例configuration大部分是相同的,在最后我会对其进行一些重要的补充。

 #******************* *******************
 #包装器属性
 #******************* *******************
 #工作目录
 wrapper.working.dir = .. / .. /

 #Java应用程序
 wrapper.java.command = C:\ Program Files \ Java \ jdk1.6.0_25 \ bin \ java.exe

 #Java Main类。 这个类必须实现WrapperListener接口
 #或者保证WrapperManager类被初始化。 帮手
提供了#个课程来为你做这个。 请参阅集成部分
详细信息#的文档。
 wrapper.java.mainclass = com.cenqua.fisheye.FisheyeServiceWrapper

 #Java Classpath(包含wrapper.jar)将类path元素添加为
 #需要从1开始(添加lib FIRST,以便log4jconfiguration先被加载)
 wrapper.java.classpath.1 =。/ fisheyeboot.jar
 wrapper.java.classpath.2 =包装/ lib中/ *。jar子

 #Java库path(Wrapper.DLL或libwrapper.so的位置)
 wrapper.java.library.path.1 =包装/ lib中
 wrapper.java.library.path.2 = LIB /天然的/ Linux的I386
 wrapper.java.library.path.3 = LIB /天然的/ OSX-PPC
 wrapper.java.library.path.4 = LIB /天然的/ Solaris的SPARC
 wrapper.java.library.path.5 = LIB /天然的/ Win32的x86的


 #Java附加参数
 wrapper.java.additional.1 = -server
 wrapper.java.additional.2 = -showversion
 wrapper.java.additional.3 = -Djava.awt.headless =真

 #JDK 1.5 jmx的附加参数
 wrapper.java.additional.4 = -Dcom.sun.management.jmxremote
将wrapper.java.additional.5 = -Dcom.sun.management.jmxremote.port = 4242
 wrapper.java.additional.6 = -Dcom.sun.management.jmxremote.authenticate =假
 wrapper.java.additional.7 = -Dcom.sun.management.jmxremote.ssl =假
 wrapper.java.additional.8 = -Dcom.sun.management.jmxremote.authenticate =假
 wrapper.java.additional.9 = -Dcom.sun.management.jmxremote.password.file =。/包装/ jmxremote.password
 wrapper.java.additional.10 = -Dwrapper.mbean.name =“wrapper:type = Java Service Wrapper Control”
 wrapper.java.additional.11 = -Dfisheye.inst = “C:\ Atlassian的\ fecru-2.6.3 \ BIN \ ..”
 wrapper.java.additional.12 = -XX:MaxPermSize参数=256米
 wrapper.java.additional.13 = -Xrs 
 wrapper.java.additional.14 = -Dfile.encoding = UTF-8


 #初始Java堆大小(以MB为单位)
 wrapper.java.initmemory = 64

 #最大Java堆大小(以MB为单位)
 wrapper.java.maxmemory = 1024

 #应用程序参数。 根据需要从1开始添加参数
 #第一个应用程序参数是其主要类的名称
应用程序启动时将调用#方法。 class上
 #名称之后是要传递给它的主参数的数量
 # 方法。 然后是实际的参数。

 wrapper.app.parameter.1 = com.cenqua.fisheye.FishEyeCtl
 wrapper.app.parameter.2 = 1
 wrapper.app.parameter.3 =启动

 #起始参数后面是主类的名字
要调用#方法来停止应用程序。 停止类名称
 #后面跟着一个标志,控制包装是否应该
在退出JVM之前,等待所有非守护线程完成。
 #该标志后面是要传递给的参数个数
 #停止类的主要方法。 最后是实际的参数。
 wrapper.app.parameter.4 = com.cenqua.fisheye.FishEyeCtl
 wrapper.app.parameter.5 =真
 wrapper.app.parameter.6 = 1
 wrapper.app.parameter.7 =停止

 #******************* *******************
 #包装logging属性
 #******************* *******************
 #控制台的输出格式。  (请参阅格式的文档)
 wrapper.console.format = M

控制台输出的#日志级别。  (请参阅日志级别的文档)
 wrapper.console.loglevel = INFO

 #logging文件用于包装输出logging。
 wrapper.logfile = VAR /数/ wrapper.log

 #日志文件的输出格式。  (请参阅格式的文档)
 wrapper.logfile.format = LPTM

日志文件输出的#日志级别。  (请参阅日志级别的文档)
 wrapper.logfile.loglevel = INFO

 #日志文件允许增长到的最大大小
 #日志被滚动。 大小以字节为单位。 默认值
 #为0,禁用日志滚动。 可能会缩写为'k'(kb)或
 #'m'(mb)后缀。 例如:10米= 10兆字节。
 wrapper.logfile.maxsize =50米

 #旧的允许的滚动日志文件的最大数量
 #个文件被删除。 默认值0意味着没有限制。
 wrapper.logfile.maxfiles = 10

 sys /事件日志输出的#日志级别。  (请参阅日志级别的文档)
 wrapper.syslog.loglevel = NONE

 #******************* *******************
 #包装Windows属性
 #******************* *******************
 #作为控制台运行时使用的标题
 wrapper.console.title =鱼眼

 #******************* *******************
 #包装Windows NT / 2000 / XP服务属性
 #******************* *******************
 #警告 - 不要在应用程序中修改任何这些属性
 #使用此configuration文件已被安装为服务。
 #请在修改本节之前卸载服务。 该
 #服务可以重新安装。

 #服务的名称
 wrapper.ntservice.name =鱼眼

 #显示服务的名称
 wrapper.ntservice.displayname =鱼眼

 #服务的描述
 wrapper.ntservice.description =鱼眼

 #服务依赖关系。 从1开始添加依赖项
 wrapper.ntservice.dependency.1 =

 #安装服务的模式。  AUTO_START或DEMAND_START
 wrapper.ntservice.starttype = AUTO_START

 #允许该服务与桌面进行交互。
 wrapper.ntservice.interactive = FALSE

值得注意的线

wrapper.java.command = C:\ Program Files \ Java \ jdk1.6.0_25 \ bin \ java.exe

JDK“热点”服务器可执行文件的完整path。 请注意,请下载完整的JDK,而不仅仅是JRE。

wrapper.java.additional.11 = -Dfisheye.inst = “C:\ Atlassian的\ fecru-2.6.3 \ BIN ..”
wrapper.java.additional.12 = -XX:MaxPermSize参数=256米
wrapper.java.additional.13 = -Xrs
wrapper.java.additional.14 = -Dfile.encoding = UTF-8

以上都没有在Atlassian文档中显示,我已经通过反复试验添加了这些内容。 当FeCru首次在服务包装下启动时,可能会因内存不足错误而停止运行,“MaxPermSize”行将修复该错误。

我也发现有必要指定FISHEYE_INST如上所示。 我不知道为什么path是用/..指定的,就像我发现的例子。 毫无疑问,一些烹饪linux的仪式。 其他的路线,我不记得他们是为了什么,但我因为某种原因添加了他们,没有logging为什么。 没有人是完美的 ;-)

wrapper.java.initmemory = 64 wrapper.java.maxmemory = 1024

堆内存分配从默认增加 – 我索引一些相当丰富的存储库,我可以承担额外的资源 – 你可以逃脱默认较小的分配。