如何编写一个Java守护进程

这将是一个networking应用程序,将总是(或者一如我所能pipe理的那样)在一个给定的端口上进行监听。

我对Java相当陌生,对于非Web服务器端编程来说是非常新的,所以我想从我的假设和初步计划中得到社区的反馈。

我已经阅读了关于jsvc( http://commons.apache.org/daemon/jsvc.html ),目前正在假设这是在linux中编写一个java程序守护进程的“最佳”方式运行centOS)。

可以configurationnagios来监视我的守护进程是否正在运行,并提醒我或系统pipe理员,当它不是? (我想是的,但我不是一个非常有才华的系统pipe理员types)

这将是一个SMPP客户端应用程序(或ESME应用程序,我猜)这就是为什么我selectJava,因为它似乎是一个非常成熟的SMPP平台。 但是,我知道用C / C ++编写守护进程更“传统”。 用现代Java,执行相当简单的任务,我是否可能遇到任何主要的缺点?

pipe理新版本部署的最佳方式是什么? 只要停止守护进程,尽快更换二进制文件,然后重新启动?

任何其他input将不胜感激。

Solutions Collecting From Web of "如何编写一个Java守护进程"

如何编写一个全天候正常运行的Java守护进程…

我们在我们的Linux服务器上运行了许多24/365应用程序,这些服务器就像下面这样调用Java:不需要任何C包装器:

nohup java -D... -X... -jar something.jar ... < /dev/null > output.log 2>&1 & 

这将使jar在没有输入( < /dev/null )和输出(stdout和stderr)重定向到日志文件( > output.log 2>&1 )的背景( nohup ... & )中运行。 我们有分布式日志记录基础设施,但仍然有一些控制台输出(如线程转储)。 这些应用程序可以运行几个月,直到我们升级。

可以配置nagios来监视我的守护进程是否正在运行,并提醒我或系统管理员,当它不是?

在监测方面,你可以做很多事情。 Nagios看起来有一个JMX插件来测试jconsole显示的信息。 这里还有很多本地的JMX日志和监控工具。 我们有内部的绿色/黄色/红色指标,可以使用JMX拉起来,很容易检查。 我还从每个应用程序中导出了一个简单的JMX / HTTP服务 ,以提供状态信息,使第三方监视工具可以轻松检测到故障。

这将是一个SMPP客户端应用程序(或ESME应用程序,我猜)这就是为什么我选择Java,因为它似乎是一个非常成熟的SMPP平台。

我假定你的意思是SMPP ? 如果是这样的话,我看不出为什么Java不能做好工作。 我们的应用程序可以实时地执行各种各样的HTTP,UDP,SMTP,JDBC,LDAP和其他协议。 我们使用Jgroups来完成一个完整的认证,加密的Java网络堆栈。

管理新版本部署的最佳方式是什么? 只要停止守护进程,尽快更换二进制文件,然后重新启动?

在替换运行中的二进制文件方面,这更复杂。 我们有前面的VIP ,并在我们的休闲取代二进制文件。 我们的内部协议被设计为故障转移。 如果你没有VIP,那么要考虑的一件事就是有序的交接。 您可以启动新的jar,并在准备好绑定到新的端口时与运行旧的jar的应用程序通信。 然后旧的应用程序解除绑定,然后新的绑定。 就是这样

希望这可以帮助。

如果你真的想在* nix上运行一些东西,我建议你看看daemontools 。

在这里和这里有一些如何做到这一点的例子。

基本上svscan会产生一个进程,从init监视你的java进程,每次崩溃时,它都会重新启动。