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

虽然我发现这个问题在SW上回答了几次,但是我没有find最后的答案,最好的办法是什么。

我不打算使用任何外部包装,因为我发现他们启动java进程下一个很好的水平低于自己,这可能会降低性能,所以似乎只剩下壳方法。

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

  • 启动 – 停止守护
  • RedHat守护进程的init.d函数
  • nohup开始后不准

你正在使用什么,并可以推荐为最可靠的方法?

谢谢。

Solutions Collecting From Web of "在Linux上守护Java应用程序的最佳方式"

虽然标准答案似乎是jsvc ,但我一直在使用djb的守护进程工具 ,这是一个很好的方法,可以把任何东西变成一个守护进程。

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

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

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

nohup java -jar MyJar &

没有什么特别的不可靠 – nohup在断开连接时不会收到SIGHUP ,并且在后台运行一个进程。

或者,您可以将输出重定向到nohup.out以外的nohup.out

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

还有YAJSW , JSW , ACD和L4J的对比表。

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

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

这还有另外一个优点,就是程序也可以很容易地作为一个windows服务运行,并且采用一致的方法。

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

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