在Linux上守护Java应用程序的最佳方法

时间:2010-04-27 20:14:27

标签: java linux daemon

虽然我多次在SW上发现这个问题的答案,但我没有找到最后的答案。

我不打算使用任何外部包装器,因为我发现它们在低于自身的水平下启动java进程,这可能会降低性能,因此似乎只剩下shell方法。

到目前为止,我发现了3种不同的shell方法:

  • 启动 - 停止守护程序
  • RedHat守护程序init.d函数
  • nohup on start / disown after start

您所使用的是什么,并且可以推荐作为最可靠的方法?

感谢。

7 个答案:

答案 0 :(得分:5)

如果我想在后台运行一个应用程序作为守护进程,我这样做:

nohup java -jar MyJar &

没有什么特别不可靠的问题 - nohup阻止您在断开连接时收到SIGHUP&在后​​台运行流程。

或者,您可以将输出重定向到nohup.out以外的其他内容。

答案 1 :(得分:5)

虽然对此的标准答案似乎是jsvc,但我一直在使用djb的daemon tools来成为守护进程的好方法。

我有java,python和一些shell脚本都作为守护进程运行,有一个简单的方法来启动/停止它们和伟大的日志记录。

我曾经在初始设计的initctl上以root身份运行daemontools本身,但几个月后我决定在普通用户下手动运行它,并使用svscan-start进行更好的日志记录。

答案 2 :(得分:3)

看看http://yajsw.sourceforge.net/。 它是TanukiSoftware Java Service Wrapper的免费且有些兼容的重新实现,具有免费的64位支持。

还有YAJSWJSWACDL4J的比较表。

答案 3 :(得分:2)

我会使用RedHat守护进程init.d函数。这允许您在服务器执行时重新启动应用程序。运行nohup不会处理服务器重启等等。

答案 4 :(得分:1)

我不会完全排除外包装 我注意到使用Tanuki Wrapper http://wrapper.tanukisoftware.org/的一些备受推崇的软件。

这具有额外的优势,即程序也可以作为Windows服务轻松运行,并采用一致的方法。

答案 5 :(得分:1)

我过去曾使用Akuma,取得了巨大的成功。事实上,它是一个Java库真的让事情变得更容易,嵌入功能是微不足道的。

答案 6 :(得分:-1)

您可以尝试使用screen(启动屏幕,然后启动java程序,然后关闭[不退出]屏幕)