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

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

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

答案1

假设本文档指的是您正在使用的版本,看起来作为 Windows 服务本地运行仍然不在产品中,使用 SRVANY 是您最好的选择。

如果发现Fisheye出现故障并异常结束,SRVANY不会重新启动它。非吸吮服务经理(NSSM)将重新启动它。NSSM 可作为免费(我相信是公共领域)替代品。

您还可以使用命令行“sc”(在 Windows XP 和更新版本的 Windows 中)来创建服务,而不是搜索 INSTSRV。sc 的命令行帮助中对该语法进行了最详细的描述,您可以通过执行 来获取该帮助sc create /?。“sc”的命令行语法很奇怪——请确保在参数中的等号后面加上空格(即“binPath= c:...”)。

答案2

一个很好的方法是使用 Tanuki Software 的 Java Service Wrapper。可以找到一个带有鱼眼的示例这里

答案3

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

这是一个示例包装器配置文件,我将其与在 Windows Server 2008 R2 上运行的 Fisheye 2.6.3 一起使用。此文件与示例配置基本相同,但有一些重要的补充,我将在最后进行评论。

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

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

# Java Main 类。该类必须实现 WrapperListener 接口
# 或者保证 WrapperManager 类已初始化。Helper
提供了 # 个类来为您执行此操作。请参阅集成部分
# 请参阅文档以了解详细信息。
wrapper.java.mainclass=com.cenqua.fisheye.FisheyeServiceWrapper

# Java Classpath(包括wrapper.jar)添加类路径元素为
# 需要从 1 开始(首先添加 lib,以便首先加载 log4j 配置)
wrapper.java.classpath.1=./fisheyeboot.jar
包装器.java.classpath.2=包装器/lib/*.jar

# Java 库路径(Wrapper.DLL 或 libwrapper.so 的位置)
包装器.java.库.路径.1=包装器/lib
wrapper.java.library.path.2=lib/native/linux-i386
wrapper.java.library.path.3=lib/native/osx-ppc
wrapper.java.library.path.4=lib/native/solaris-sparc
wrapper.java.library.path.5=lib/native/win32-x86


# Java 附加参数
wrapper.java.additional.1=-服务器
wrapper.java.additional.2=-显示版本
wrapper.java.additional.3=-Djava.awt.headless=true

# JDK 1.5 jmx 的附加参数
wrapper.java.additional.4=-Dcom.sun.management.jmxremote
包装器.java.additional.5=-Dcom.sun.management.jmxremote.port=4242
包装器.java.additional.6=-Dcom.sun.management.jmxremote.authenticate=false
包装器.java.additional.7=-Dcom.sun.management.jmxremote.ssl=false
包装器.java.additional.8=-Dcom.sun.management.jmxremote.authenticate=false
wrapper.java.additional.9=-Dcom.sun.management.jmxremote.password.file=./wrapper/jmxremote.password
wrapper.java.additional.10=-Dwrapper.mbean.name="wrapper:type=Java 服务包装器控制"
wrapper.java.additional.11=-Dfisheye.inst="C:\Atlassian\fecru-2.6.3\bin\."
wrapper.java.additional.12=-XX:MaxPermSize=256m
包装器.java.additional.13=-Xrs
包装器.java.additional.14=-Dfile.encoding=UTF-8


# 初始 Java 堆大小(以 MB 为单位)
包装器.java.初始化内存=64

# 最大 Java 堆大小(以 MB 为单位)
包装器.java.最大内存=1024

# 应用参数,从1开始根据需要添加参数
# 第一个应用程序参数是其主类的名称
# 方法将在应用程序启动时调用。该类
# 名称后面跟着要传递给其主函数的参数数量
# 方法。接下来是实际参数。

wrapper.app.parameter.1=com.cenqua.fisheye.FishEyeCtl
包装器.应用程序.参数.2=1
包装器.应用程序.参数.3=开始

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

#********************************************************************
# 包装器日志属性
#********************************************************************
# 控制台输出的格式。(请参阅文档了解格式)
包装器.控制台.格式=M

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

# 用于包装器输出日志的日志文件。
wrapper.log文件=var/log/wrapper.log

# 日志文件的输出格式。(请参阅文档了解格式)
包装器.日志文件.格式=LPTM

# 日志文件输出的日志级别。(请参阅文档了解日志级别)
包装器.日志文件.日志级别=INFO

# 日志文件允许增长到的最大大小
# 日志被滚动。大小以字节为单位指定。默认值
0 号,禁用日志滚动。可以用“k”(kb)或
# 'm' (mb) 后缀。例如:10m = 10 兆字节。
包装器.日志文件.最大大小=50m

# 在旧日志文件之前允许的最大滚动日志文件数
删除 # 个文件。默认值为 0,表示没有限制。
包装器.日志文件.最大文件数=10

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

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

#********************************************************************
# 包装器 Windows NT/2000/XP 服务属性
#********************************************************************
# 警告 - 应用程序
#使用此配置文件已经安装为服务。
# 修改此部分前,请先卸载该服务。
然后可以重新安装#服务。

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

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

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

# 服务依赖项。从 1 开始,根据需要添加依赖项
wrapper.ntservice.dependency.1=

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

# 允许服务与桌面交互。
包装器.ntservice.interactive=false

值得注意的台词

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

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

wrapper.java.additional.11=-Dfisheye.inst="C:\Atlassian\fecru-2.6.3\bin.."
wrapper.java.additional.12=-XX:MaxPermSize=256m
wrapper.java.additional.13=-Xrs
wrapper.java.additional.14=-Dfile.encoding=UTF-8

以上内容均未在 Atlassian 文档中显示,我通过反复试验逐渐添加了这些内容。当 FeCru 首次在服务包装器下启动时,它可能会因内存不足错误而停止,'MaxPermSize' 行可修复该问题。

我还发现有必要指定 FISHEYE_INST,如上所示。我不知道为什么路径/..末尾要用 指定,我找到的例子中就是这样的。毫无疑问,这是一些 cookie linux 惯例。其他行,我不记得它们是做什么用的,但我出于某种原因添加了它们,但没有记录原因。人无完人 ;-)

包装器.java.初始化内存=64 包装器.java.最大内存=1024

堆内存分配从默认值增加了 - 我索引了一些相当重要的存储库,并且我可以负担得起额外的资源 - 您可以使用默认的较小分配。

相关内容