2010-04-27 130 views
6

尽管我发现这个问题在SW上得到了几次回答,但我没有找到最终答案,最好的方法是什么。在Linux上对Java应用程序进行守护进程的最佳方式

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

我迄今发现3种不同的外壳方法:

  • 启动 - 停止 - 守护
  • RedHat的守护进程的init.d功能
  • 在启动的nohup /认启动后

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

谢谢。

+0

“你正在使用的是什么”投票问题与SO – Raedwald 2013-10-21 16:45:07

+0

的主题无关“人们正在使用的是什么”是一个话题,你很讨厌你决定关闭一些事情,因为它们是“基于观点的”。讽刺不是? – Nazar 2016-09-08 15:16:21

回答

5

尽管对此的标准答案似乎是jsvc,但我一直在使用djb的daemon tools是将任何东西变为守护进程的好方法。

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

我以前用root运行daemontools作为最初设计的initctl,但几个月后我决定手动运行它,使用普通用户,并使用svscan-start进行更好的日志记录。

-1

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

+0

不完全是一个可怕的建议,我为某些事情做这件事。但是我认为这与将守护进程运行的意图相去甚远。不过,谢谢你的建议。 – 2013-01-16 23:23:59

1

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

这增加了一个优点,即该程序也可以作为一个Windows服务以一致的方式轻松运行。

+0

他不能在Linux上将其作为Windows服务运行。 – danben 2010-04-27 20:41:11

+0

嗯,我真的没有仔细观察单声道发展,但那不是重点。为什么限制应用程序仅在不必要的情况下在Linux上运行。也许其他人可能会发现需要运行该应用程序,并发现他们只能在Windows上运行。为什么不限制潜在用户的使用限制并鼓励他们重复使用呢? – crowne 2010-04-27 20:59:27

5

如果我想在后台运行的守护进程的应用程序,我不喜欢这样写道:

nohup java -jar MyJar &

没有什么特别不可靠而已 - nohup防止它接收SIGHUP当您断开连接,并且&在后台运行进程。

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

2

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

1

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