尽管我发现这个问题在SW上得到了几次回答,但我没有找到最终答案,最好的方法是什么。在Linux上对Java应用程序进行守护进程的最佳方式
我不打算使用任何外部包装,因为我发现他们启动java进程下一个很好的水平低于自己,这可能会降低性能,所以它似乎只剩下了shell方法。
我迄今发现3种不同的外壳方法:
- 启动 - 停止 - 守护
- RedHat的守护进程的init.d功能
- 在启动的nohup /认启动后
什么你正在使用的人,可以推荐为最可靠的方法吗?
谢谢。
尽管我发现这个问题在SW上得到了几次回答,但我没有找到最终答案,最好的方法是什么。在Linux上对Java应用程序进行守护进程的最佳方式
我不打算使用任何外部包装,因为我发现他们启动java进程下一个很好的水平低于自己,这可能会降低性能,所以它似乎只剩下了shell方法。
我迄今发现3种不同的外壳方法:
什么你正在使用的人,可以推荐为最可靠的方法吗?
谢谢。
尽管对此的标准答案似乎是jsvc,但我一直在使用djb的daemon tools是将任何东西变为守护进程的好方法。
我有java,python和几个shell脚本作为守护进程运行,用一个简单的方法来启动/停止它们,并且有很好的日志记录。
我以前用root运行daemontools作为最初设计的initctl,但几个月后我决定手动运行它,使用普通用户,并使用svscan-start进行更好的日志记录。
你可以尝试使用screen
(启动屏幕,然后启动Java程序,然后关闭[不退出]屏幕)
不完全是一个可怕的建议,我为某些事情做这件事。但是我认为这与将守护进程运行的意图相去甚远。不过,谢谢你的建议。 – 2013-01-16 23:23:59
我也不能完全排除外部包装。
我已经注意到一些使用Tanuki Wrapper http://wrapper.tanukisoftware.org/的备受推崇的软件。
这增加了一个优点,即该程序也可以作为一个Windows服务以一致的方式轻松运行。
如果我想在后台运行的守护进程的应用程序,我不喜欢这样写道:
nohup java -jar MyJar &
没有什么特别不可靠而已 - nohup
防止它接收SIGHUP
当您断开连接,并且&
在后台运行进程。
或者,您可以将输出重定向到nohup.out
以外的其他东西。
我会使用RedHat守护进程init.d函数。这使您可以在服务器启动时重新启动应用程序。运行nohup不会处理服务器重新启动等。
我在过去使用Akuma,并取得了巨大成功。事实上,它是一个Java库真的让事情变得更容易,嵌入功能是微不足道的。
看看http://yajsw.sourceforge.net/。 TanukiSoftware Java Service Wrapper免费且兼容重新实现,提供免费的64位支持。
“你正在使用的是什么”投票问题与SO – Raedwald 2013-10-21 16:45:07
的主题无关“人们正在使用的是什么”是一个话题,你很讨厌你决定关闭一些事情,因为它们是“基于观点的”。讽刺不是? – Nazar 2016-09-08 15:16:21