根据官方安装指南,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
堆内存分配从默认值增加了 - 我索引了一些相当重要的存储库,并且我可以负担得起额外的资源 - 您可以使用默认的较小分配。