虽然我多次在SW上发现这个问题的答案,但我没有找到最后的答案。
我不打算使用任何外部包装器,因为我发现它们在低于自身的水平下启动java进程,这可能会降低性能,因此似乎只剩下shell方法。
到目前为止,我发现了3种不同的shell方法:
您所使用的是什么,并且可以推荐作为最可靠的方法?
感谢。
答案 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位支持。
答案 3 :(得分:2)
我会使用RedHat守护进程init.d函数。这允许您在服务器执行时重新启动应用程序。运行nohup不会处理服务器重启等等。
答案 4 :(得分:1)
我不会完全排除外包装 我注意到使用Tanuki Wrapper http://wrapper.tanukisoftware.org/的一些备受推崇的软件。
这具有额外的优势,即程序也可以作为Windows服务轻松运行,并采用一致的方法。
答案 5 :(得分:1)
我过去曾使用Akuma,取得了巨大的成功。事实上,它是一个Java库真的让事情变得更容易,嵌入功能是微不足道的。
答案 6 :(得分:-1)
您可以尝试使用screen
(启动屏幕,然后启动java程序,然后关闭[不退出]屏幕)