小编Noa*_*oah的帖子

Apache jsvc无法停止守护进程

我使用本机编译的jsvc来启动java守护进程.我在openSUSE 32位vm上运行它.代码实现了Apache的守护进程接口,我正在使用以下命令执行deamon.

./jsvc -home jre -errfile logs/jsvc.err -pidfile daemon.pid -cp <my_classpath> com.loader.loaderservice.LoaderDaemon
Run Code Online (Sandbox Code Playgroud)

它启动并运行没有问题.我可以作为普通用户和root用户启动守护进程.但是,当我去终止守护进程时,jsvc会终止进程而不是发出stop命令.

./jsvc -stop -home jre -outfile logs/jsvc.err -errfile logs/jsvc.err -pidfile daemon.pid -cp <my_classpath> com.loader.loaderservice.LoaderDaemon
Run Code Online (Sandbox Code Playgroud)

守护进程终止,但不执行任何关闭步骤(例如,它应该记录,标记数据库中的记录等).我在logs/jsvc.err文件中得到以下内容,并且它不会写任何其他日志:

Service exit with return value 143
Run Code Online (Sandbox Code Playgroud)

在谷歌搜索错误后,我看到一些人都看到了同样的事情,但我无处可寻找一个好的解决方案(http://mail-archives.apache.org/mod_mbox/commons-dev/200401. mbox/%3CPine.GSO.3.96.1040105133739.23375A-100000@merlot.tel.uva.es%3E,http://www.tek-tips.com/viewthread.cfm?qid=1014679,HTTP://三比特. net/mail-archive/tomcat-users/msg03832.html).

更新: 使用Apache的窗口的服务启动器(procrun)我能够毫无问题地启动和停止服务.该问题似乎只与jsvc相关,并且仅在停止守护进程时才会出现.

更新2: 在仔细阅读了http://commons.apache.org/daemon/jsvc.html#Starting_jsvc后,我注意到我正在使用的停止标签通过我指定的pid文件发出了一个kill命令.似乎jsvc实际上并没有通过设计优雅地停止守护进程.这与我所看到的行为一致,因为非常详细的stop方法不会写出任何消息.

-stop        stop the service using the file given in the -pidfile option
Run Code Online (Sandbox Code Playgroud)

新问题:

  • 如果我的java main已经实现了Apache Daemon接口,那么如何在正在运行的守护进程上发出'stop'?
  • 我是否需要jsvc以外的东西(这似乎只对启动或杀死守护进程有用)?

apache daemon exit-code jsvc

10
推荐指数
1
解决办法
7507
查看次数

apache procrun无法启动服务

编辑

我正在使用loaderDeamon接口来安装和运行java应用程序作为Windows服务.为此,Apache的procrun服务工具(与tomcat一起安装的相同的东西)处理服务的安装和执行.

最近,当通过服务管理器执行服务时,服务声称正在运行,但没有响应.没有写入日志,并且应用程序的客户端无法进行通信.这让我觉得服务实际上并没有运行.

我试图通过// TS命令通过procrun启动服务,如下所示:http://commons.apache.org/daemon/procrun.html,即使我们等待也挂起并且还没有启动服务到24小时.procrun本身生成一个我们捕获的日志.完整的日志包含在下面.我有几个关于日志的问题,我希望能解决为什么服务无法启动.

  1. 首先,'Java Worker线程完成了什么...以status = 6开头'表示线程终止?
  2. 其次,当我们到达'等待所有线程退出'时,哪些线程仍在执行?
  3. 第三,在启动服务时,日志中还有其他可能存在问题的东西吗?

此服务过去已成功执行,最近在升级到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)

java service multithreading procrun

3
推荐指数
2
解决办法
9918
查看次数

如何快速关闭Microsoft SQL Server Service Broker的所有元素?

我们有一个应用程序,它使用Service Broker在SQL Server中创建队列和服务来处理数据库通信.该应用程序使用这些服务并正确发送/接收消息,但我现在想测试此应用程序的初始化阶段(它创建代理以及在幕后工作的存储过程).基本上,我需要以一定的频率删除代理元素,现在它真的很慢.

如果有帮助,我可以改变应用程序创建代理元素的方式 - 但这个问题与关闭所有内容更相关.

我用来关闭代理的代码是:

receive * from [dbo].[notify_initiator_queue]
alter queue [dbo].[notify_initiator_queue] with status = OFF
drop service [//DBNotifyService-Initiator]
drop queue [dbo].[notify_initiator_queue]
drop message types, contacts, etc...
Run Code Online (Sandbox Code Playgroud)

这在"drop service [// XF/DBNotifyService-Initiator]"上会挂起一段时间.有没有更快捷的方法来关闭和删除服务代理的所有或部分元素?

谢谢!

== ==更新

好吧,我花了一些时间,但下面的答案确实解决了这个问题.我想澄清可能遇到这个问题的其他人.

我的应用程序正确关闭所有服务,队列,合同和消息.关闭服务需要花费很长时间,因为应用程序中的一个bug会有一堆开放的对话.正在创建这些对话,用于发送消息,然后关闭:

END CONVERSATION @conversation with cleanup
Run Code Online (Sandbox Code Playgroud)

'with cleanup'位只关闭对话的本地端(想想,它允许服务器清理可能在另一端出错的任何对话).它不会关闭发送服务的另一端,因此会话保持打开状态.正常的对话应该结束:

END CONVERSATION @conversation
Run Code Online (Sandbox Code Playgroud)

这修复了app bug.但是,我在数据库中有几百万次破碎的对话.我可以像普通人一样丢弃数据库,或者我可以尝试弄清楚如何关闭数据库.要逐一关闭它们,需要:

declare @conversation uniqueidentifier 
while exists (select top 1 conversation_handle from sys.transmission_queue ) 
begin 
  set @conversation = (select top 1 conversation_handle from sys.transmission_queue )
  end conversation @conversation with cleanup 
end
Run Code Online (Sandbox Code Playgroud)

每个连接需要几毫秒(数百万的速度非常慢).如果我想快速关闭它们,请使用下面的答案并运行修改后的命令: …

sql-server service-broker

2
推荐指数
1
解决办法
2620
查看次数