jar -jar start.jar
启动Jetty,它确实如此。但当我关闭我的SSH控制台时,显然它已经死了。
如何正确运行?
答案 0 :(得分:13)
这是否适用于在实际上为Jetty下运行的应用程序提供服务的生产机器上运行?我认为情况确实如此,因为你要求启动正确。
如果是这样,您需要一个适当的流程监督系统,例如runit,daemontools,monit,upstart,systemd或好的ol' SysV init.d(如上所述w / a gist)。使用哪种方法取决于您的偏好,业务需求以及您的底层操作系统。
我使用并更喜欢runit。它建立在solid principles(daemontools)之上,对于我喜欢的发行版(Debian和Ubuntu),作者本人nicely packaged。
尽管在其他答案中被推荐,并在评论中提到,在screen / tmux中启动一个长时间运行的进程,或者通过nohup是次优的。您无法真正控制该过程。如果它死了它将不会重新启动。您必须手动查找其PID,否则手动管理服务。你必须做更多的手工工作来获取日志输出(重定向,发送到一些随机文件等)。您不能可靠地使其依赖于其他进程,或者让其他进程依赖于它。体面的过程监督系统默认为您提供所有这些功能。
如果您的目标完全不同,请更新问题以更具体地说明您的用例。
答案 1 :(得分:3)
java -jar start.jar &
(在后台运行)也应该可以工作,虽然日志记录不会像w / nohup一样好转。
这是因为杀死启动进程的shell(例如通过注销)会杀死进程,除非它们是后台进程。屏幕也起作用,因为它在后台运行,并且屏幕可以在您附加/分离时有效地保持会话运行。
答案 2 :(得分:2)
如果您使用的是* nix系统,最佳解决方案可能是使用/etc/init.d
中的脚本(或任何系统的等效系统)。 https://gist.github.com/404672有一个。
否则,在命令行中使用nohup
或screen
至少会使您在注销时不会死亡。因此,将使用&
将进程置于后台。
答案 3 :(得分:1)
一种方法是使用nohup
nohup java -jar start.jar
这样做的好处是可以将stdout和stderr写入文件
另一种方法是使用screen