我试图用procrun包裹弹簧靴"uber JAR".
按预期运行以下工作:
java -jar my.jar
我需要我的弹簧启动罐自动启动Windows启动.最好的解决方案是将jar作为服务运行(与独立的tomcat相同).
当我尝试运行这个时,我得到"Commons Daemon procrun失败并退出值:3"
看一下spring-boot源代码,它看起来好像使用了自定义类加载器:
尝试直接运行main方法时,我也得到"ClassNotFoundException".
java -cp my.jar my.MainClass
有没有一种方法可以用来在spring boot jar中运行我的main方法(不是通过JarLauncher)?
有没有人成功地将spring-boot与procrun集成?
我知道http://wrapper.tanukisoftware.com/.但是由于他们的许可我不能使用它.
UPDATE
我现在设法使用procrun启动服务.
set SERVICE_NAME=MyService
set BASE_DIR=C:\MyService\Path
set PR_INSTALL=%BASE_DIR%prunsrv.exe
REM Service log configuration
set PR_LOGPREFIX=%SERVICE_NAME%
set PR_LOGPATH=%BASE_DIR%
set PR_STDOUTPUT=%BASE_DIR%stdout.txt
set PR_STDERROR=%BASE_DIR%stderr.txt
set PR_LOGLEVEL=Error
REM Path to java installation
set PR_JVM=auto
set PR_CLASSPATH=%BASE_DIR%%SERVICE_NAME%.jar
REM Startup configuration
set PR_STARTUP=auto
set PR_STARTIMAGE=c:\Program Files\Java\jre7\bin\java.exe
set PR_STARTMODE=exe
set PR_STARTPARAMS=-jar#%PR_CLASSPATH%
REM Shutdown configuration
set PR_STOPMODE=java
set PR_STOPCLASS=TODO
set PR_STOPMETHOD=stop
REM JVM configuration
set …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用prunsrv.exe为应用程序安装并启动服务
我能够安装该服务,但服务不会启动,并给我一个错误

以下是用于使用prunsrv.exe安装服务的配置
set SERVICE_NAME=TestService
REM Service log configuration
set PR_LOGPREFIX=%SERVICE_NAME%
set PR_LOGPATH=D:\setups\Commons_Daemon\commons-daemon-1.0.14-bin-windows\logs
set PR_STDOUTPUT=auto
set PR_STDERROR=auto
set PR_LOGLEVEL=INFO
REM Path to java installation
set PR_JVM=C:\Program Files\Java\jre1.6.0_04\bin\client\jvm.dll
set PR_CLASSPATH=D:\setups\Commons_Daemon\commons-daemon-1.0.14-bin-windows\temp.jar;
REM Startup configuration
set PR_STARTUP=auto
set PR_STARTMODE=java
set PR_STARTCLASS=Trys.AppLauncher
set PR_STARTMETHOD=start
REM Shutdown configuration
set PR_STOPMODE=java
set PR_STOPCLASS=Trys.AppLauncher
set PR_STOPMETHOD=stop
REM JVM configuration
set PR_JVMMS=64
set PR_JVMMX=128
set PR_JVMSS=4000
REM Install service
prunsrv.exe //IS//%SERVICE_NAME%
Run Code Online (Sandbox Code Playgroud)
将上述配置打包到批处理文件中以执行安装服务
此外,日志文件不会生成,因为我甚至无法调试.
请告诉我哪里出错了
我通过运行以下命令将标准可执行jar文件安装为Windows服务:
> prunsrv.exe //IS//"My Service" --Install="C:\path-to-prunsrv.exe" --Jvm=auto \
--Startup=auto --StartMode=jvm --Classpath="C:\path-to-MyService.jar" \
--StartClass=com.mydomain.MyService
Run Code Online (Sandbox Code Playgroud)
我现在可以通过运行以下命令(我正在使用Java 1.6)在控制台模式下运行我的程序:
> prunsrv.exe //TS//"My Service"
Run Code Online (Sandbox Code Playgroud)
当我尝试通过标准Windows服务接口启动服务时,我收到以下错误消息:
本地计算机上的MyService服务已启动,然后停止.如果某些服务未被其他服务或程序使用,则会自动停止.
当我尝试以这种方式启动服务时,我的应用程序的日志文件中没有输出.Window的事件日志(Windows 7 64位)中也没有输出.我该怎么做才能找出为什么这项服务无法运行?
我正在尝试使用Apache commons守护程序启动Windows服务.它适用于Windows XP,但我试图在Windows 7 x64上运行它.它无法启动,我在日志中收到以下错误:
[2010-12-13 17:21:19] [info] Commons Daemon procrun(1.0.3.0)开始[2010-12-13 17:21:19] [info]运行'NodeService'服务... [2010- 12-13 17:21:19] [info]启动服务... [2010-12-13 17:21:19] [错误]创建java失败[2010-12-13 17:21:19] [错误] ServiceStart返回1 [2010-12-13 17:21:19] [info]运行服务完成.[2010-12-13 17:21:19] [info] Commons Daemon procrun完成了
我设置了JAVA_HOME并将java bin添加到PATH,只是为了确定.我不确定它为什么没有启动,或者它是否与x64操作系统有关.它最初是为32位系统设计的.
我有一个作为win-service运行的应用程序(使用Apache-Procrun).我想用JVisualVM监视该应用程序.我--openpid <PID>没有成功使用命令行参数,具有讽刺意味的是,旧的JConsole设法连接到该应用程序.

我还检查%TMP%\hsperfdata_username了JVisualVM- 故障排除指南中描述的-Directory的所有问题.一切都很好.
如何让JVisualVM监控我的应用程序?
我试图通过Apache procrun作为Windows服务运行的Java应用程序遇到问题。
该应用程序由2个组件组成,这是Java组件,该组件位于应用程序的主要部分。还有一个C组件,使Java应用程序可以与某些硬件进行通信。两者之间的接口使用Java本机接口(JNI)。
如果C组件崩溃,则整个JVM也将关闭。但是,在procrun中,这将作为“ VM退出代码:0”返回。(参见下面)
[2013-06-27 11:55:47] [debug] ( prunsrv.c:1528) [ 8488] Waiting for worker to finish...
[2013-06-27 11:55:55] [debug] ( javajni.c:964 ) [ 5716] Java Worker thread finished applicationName/core/applicationNameCore:main with status=0
[2013-06-27 11:55:55] [debug] ( prunsrv.c:1533) [ 8488] Worker finished.
[2013-06-27 11:55:55] [debug] ( prunsrv.c:1559) [ 8488] Waiting for all threads to exit
[2013-06-27 11:56:46] [debug] ( prunsrv.c:919 ) [10160] Start exit hook called ...
[2013-06-27 11:56:46] [debug] ( prunsrv.c:920 ) [10160] VM exit code: 0
[2013-06-27 11:56:46] [debug] …Run Code Online (Sandbox Code Playgroud) 我在我的产品中使用zookeeper(3.3.3).在Windows上使用zookeeper时,我正在创建一个服务(使用prunsrv),我几乎没有查询和问题.全部列出,
问题:1)zkServer.cmd没有启动Win server 2008机器和Win 7 Enterprise(64位两者),不得不更换以下行,
java "-Dzookeeper.log.dir=%ZOO_LOG_DIR%" "-Dzookeeper.root.logger=%ZOO_LOG4J_PROP%" -cp "%CLASSPATH%" %ZOOMAIN% "%ZOOCFG%" %*
Run Code Online (Sandbox Code Playgroud)
至
java "-Dzookeeper.log.dir=%ZOO_LOG_DIR%" "-Dzookeeper.root.logger=%ZOO_LOG4J_PROP%" -cp "%CLASSPATH%" %ZOOMAIN% "%ZOOCFG%"
And it worked, could it be fixed in some other way?
Run Code Online (Sandbox Code Playgroud)
2)在zoo.cnf中我指定了dataDir,它还创建了一些其他目录(bin/zookeeper-3.4.5zookeeper-3.4.5data/version-2/snapshot)并将快照存储在那里.
查询:1)zkServer.cmd没有启动/停止,因为它在zkServer.sh中,所以基本上它是用zkServer.cmd启动但停止我做一个Ctrl + C/Z所以如果我启动进程,它是一个前台进程,并在我执行ctrl + C时被杀死
2)我必须创建一个zookeeper服务,我使用prunsrv来做到这一点.我想出了以下两种方法.
a)
prunsrv //IS//Zookeeper --DisplayName=" ZOOKEEPER Service" --Description=" ZOOKEEPER Service" --Startup=auto --StartMode=exe --StartPath=%ZOOKEEPER_HOME% --StartImage=%ZOOKEEPER_HOME%\bin\zkServer.cmd --StopTimeout=5 --LogPath=%LOGS_DIR% --LogPrefix=zookeeper --LogLevel=Info --PidFile=zookeeper.pid --StdOutput=auto --StdError=auto
b)
cd %ZOOKEEPER_HOME%\bin\
call "%~dp0zkEnv.cmd"
set ZOOMAIN=org.apache.zookeeper.server.quorum.QuorumPeerMain
prunsrv //IS//Zookeeper --DisplayName=" ZOOKEEPER Service" --Description=" ZOOKEEPER Service" --Jvm="%JVM_DLL%" --JvmOptions=!JAVA_OPTS! --Environment=zookeeper.log.dir=%ZOO_LOG_DIR%;zookeeper.root.logger=%ZOO_LOG4J_PROP%; --Startup=auto --LibraryPath=%LIB_DIR% …Run Code Online (Sandbox Code Playgroud) 我一直致力于一个项目,我需要在Windows的Wix安装程序中安装作为spring boot应用程序运行的Java服务.如果系统上已经全局安装了JRE实例,它应该自动检测,如果是,请使用它,否则,为此应用程序安装一个私有JRE.在寻找完整的解决方案并解决许多不同的问题后,我想出了一个有效的配置.它通过Wix手动安装服务,并设置procrun程序所需的所有注册表项,而不是使用procrun来安装服务.
我是网站的新手(作为提交者),但我将发布我创建的Wix XML作为答案.它并不完美,但希望能帮助其他人克服我必须跳过的障碍才能完成这项工作.
我的 Java 类包含以下方法:
public static void main(String[] argv) //启动服务
public static void stop() //停止服务
我使用Apache Commons Daemon中的 Procrun将 Java 类设置为 Windows 服务。当我尝试停止服务“[618 javajni.c] [错误] com/caphyon/service/JavaService 类中的静态方法 'void main(String[])' 未找到”时,出现错误。问题是我试图在服务关闭时调用 stop 方法,但它似乎用“void main(String[])”覆盖 StopMethod。以下是我在设置服务时使用的停止和启动参数:
prunsrv.exe //US//JavaService --StartClass=com.caphyon.service.JavaService --StartMode=jvm --StartPath="C:\JavaService"
prunsrv.exe //US//JavaService --StopClass=com.caphyon.service.JavaService --StopMode=jvm --StopPath="C:\JavaService" --StopMethod="void stop()"
如何设置关闭服务时 prunsrv 将调用的 StopMethod?
编辑
我正在使用loaderDeamon接口来安装和运行java应用程序作为Windows服务.为此,Apache的procrun服务工具(与tomcat一起安装的相同的东西)处理服务的安装和执行.
最近,当通过服务管理器执行服务时,服务声称正在运行,但没有响应.没有写入日志,并且应用程序的客户端无法进行通信.这让我觉得服务实际上并没有运行.
我试图通过// TS命令通过procrun启动服务,如下所示:http://commons.apache.org/daemon/procrun.html,即使我们等待也挂起并且还没有启动服务到24小时.procrun本身生成一个我们捕获的日志.完整的日志包含在下面.我有几个关于日志的问题,我希望能解决为什么服务无法启动.
此服务过去已成功执行,最近在升级到java 1.7.5版后失败.我恢复到java 1.7.3效果,所以我相信jvm的改变是无关的,尽管值得一提.
[2012-07-24 07:16:04] [debug] ( prunsrv.c:1644) Commons Daemon procrun log initialized
[2012-07-24 07:16:04] [info] ( prunsrv.c:1648) Commons Daemon procrun (1.0.10.0 32-bit) started
[2012-07-24 07:16:04] [debug] ( prunsrv.c:559 ) Installing service...
[2012-07-24 07:16:04] [info] ( prunsrv.c:595 ) Service CProgramFilesx86XpressfeedLoaderV5serviceLoaderEngine name XF Engine - C:\Program Files (x86)\Xpressfeed Loader V5 service\Loader
[2012-07-24 07:16:04] [debug] ( prunsrv.c:611 ) Setting service description The Xpressfeed V5 loader engine, used …Run Code Online (Sandbox Code Playgroud) 我正在使用apache commons daemon工具Procrun将java命令行工具安装为Windows服务.
java工具在运行期间在控制台上显示大量内容.守护进程工具会自动将任何sysout记录到日志文件中.只要服务正在运行,就无法删除此文件.
问题:我的服务和应用程序几乎不应该重新启动.这导致StdOutput每月几百GB 的守护程序日志文件,我只能通过先停止应用程序来手动清除.
问题:是否可以禁用此服务日志记录?
我的应用程序具有自我更新功能。
它会自行下载新版本,当下载过程结束时发生这种情况时,JVM 将退出并显示代码2。
是否可以将Procrun配置为在出现退出代码2时自动重新启动服务?