我没有找到关于如何注册一个将org.apache.commons.daemon.Daemon
接口实现为Windows服务的类的非常好的示例(实际上我没有找到一个示例)。
我是否必须使用procrun注册该实现?但是实现该接口似乎没有意义,因为procrun可以将任何程序注册为Windows服务。
此外,procrun页面(http://commons.apache.org/proper/commons-
daemon/procrun.html
)上似乎存在一个docu-bug :
的的描述--StartMethod
参数状态:
注意:在jvm模式下,在调用stop方法之前,start方法不应返回。
但是,在“在jvm模式下使用Procrun”部分中的页面下方:
请注意,方法处理服务启动应创建并启动一个单独的线程来执行处理,然后返回。从不同的线程调用start和stop方法。
我读错了还是有点矛盾?静态start(String [] args)方法的正确行为是什么?
最好的祝福
记录:
我是否必须使用procrun注册该实现?但是实现该接口似乎没有意义,因为procrun可以将任何程序注册为Windows服务。
是的,该服务需要使用prunsrv在Windows中注册。例如,使用以下调用:
prunsrv.exe //IS//MyTestService ^
--DisplayName="My Test Service" --Description="Doesn't really do anything" ^
--Install=@@PATH_TO_PRUNSRV@@\prunsrv.exe ^
--Startup=manual ^
--Jvm=auto ^
--Classpath="@@PUT_FULL_CLASSPATH_HERE@@" ^
--StartMode=jvm ^
--StartClass==com.stackoverflow.questions.31556478.ServiceLauncher ^
--StartParams="@@PUT_ANY_START_ARGUMENTS_HERE@@" ^
--StartMethod=start ^
--StopMode=jvm ^
--StopClass=com.stackoverflow.questions.31556478.ServiceLauncher ^
--StopMethod=stop
之后,可以通过以下方式启动服务
prunsrv //ES//MyTestSevice
静态start(String [] args)方法的正确行为是什么?
测试这两种变体,只有实现可行,并且停留在启动方法中,并且不会产生其他线程。那是一个可以在上面的prunsrv调用中注册的启动器实现,看起来像这样(没有任何保证):
package com.stackoverflow.questions.31556478;
import java.util.Arrays;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ServiceLauncher
{
private static final Logger LOGGER = LoggerFactory.getLogger(ServiceLauncher.class);
private static SomeServer mServer;
public static void start(final String[] args)
{
LOGGER.debug("Start called: {}", Arrays.toString(args));
try
{
mServer = new SomeServer(args);
mServer.start();
}
catch (final Exception e)
{
LOGGER.error("Terminating due to Exception: ", e);
}
}
public static void stop(final String[] args) throws Exception
{
LOGGER.debug("Stop called: {}", Arrays.toString(args));
synchronized (ServiceLauncher.class)
{
if (mServer != null)
{
mServer.stop();
}
}
}
}
我使用mkdir()在代码中创建新文件,但由于某种原因,它设置了一个名为“daemon”的东西作为admin。我不能删除这些文件,编辑,访问,甚至移动这些文件。如何在代码中创建文件时改变这种情况?
问题内容: 我需要将PHP脚本设置为Windows服务。 无论哪个用户登录,我都需要它运行,以及在系统启动时都运行-所以听起来Windows服务是最好的,但是很高兴听到其他建议。 (此脚本连续运行,这不是我可以使用“计划任务管理器”执行的“每5分钟运行一次”。) 涵盖了使用sc.exe程序来安装服务。 但是,根据我的阅读,我需要对PHP脚本进行包装,以接受来自Windows服务管理器的特殊命令。有
我正在试用neo4j2.0 for Windows的社区版测试版,但我看不到将其作为一项服务来安装的方法。启动Neo4j的唯一方法似乎是通过neo4j-community.exe,但这需要交互性才能按下开始按钮。在1.x版本中存在的批处理文件消失了。 有人有什么想法吗?
问题内容: 如何说服Windows使用JDK而不是JRE? 问题是Windows忽略了它,也忽略了我将JDK bin目录作为路径中的第一项的事实。 当我从命令行运行时,它运行1.7 JRE而不是调用我的JDK 1.6安装。 我的猜测是这是1.7特有的问题,Windows 7正在使用注册表进行某些操作。 有想法该怎么解决这个吗? 编辑 :糟糕。我的意思是“路径”时,我在上面写了“ classpath
更新后,我在Ubuntu服务器上部署codeigniter项目时遇到了一些问题,当我点击链接时,我发现404 Apache错误。 当我把项目放进去的时候http://roy.my-domain.com/ =/var/www/html/folder-一切正常-但当我添加子目录时http://roy.my-domain.com/roy/ =/var/www/html/roy/-我收到404个错误。 当
当我启动start WebLogic.cmd在mydomed\bin中时,我的服务器正常工作。当我注销时,它会自动停止。在这里,我试图创建一个窗口服务,如oracle文档“http://docs.oracle.com/cd/E11035_01/wls100/server_start/winservice.html”中所述。 但我的服务不再说这与此无关。 这是我创建的2个文件 1.)run.cmdD