关闭终端窗口后,Jetty服务器停止运行。

5
我在Java和Jetty应用部署方面是个新手。我使用默认设置来设置我的Jetty服务器,并在终端窗口上运行java -jar start.jar。服务器按预期运行,但当我关闭终端时它会停止。这正常吗?我以前使用过XAMPP,在那里你可以关闭终端而不会出现任何问题。如何解决这个问题,每个人都需要偶尔关闭自己的个人电脑。
顺便说一下,我正在使用Mac。
5个回答

11

看起来你正在使用ssh或类似的东西在远程Linux/Unix服务器上启动Jetty。

因此,你可以使用nohup java -jar start.jar & - nohup将防止你的进程被通常的Unix“挂断”信号(参考)停止,而&将把jetty作为后台进程,这样你就可以输入exit或任何其他命令退出。

如果你想重新连接到Jetty终端,我建议你阅读一下关于GNU screen的信息。

如果你想再次优雅地停止jetty,我真的建议你将其用作服务或使用screen避免失去终端。但如果为时已晚,你可以在jps -l的输出中找到PID,然后调用kill $PID


你有没有输错任何字符?我无法让它工作,服务器已经启动但我无法关闭终端。我是在Eclipse RSE终端中使用SSH。我按照你说的输入了 java -jar start.jar & - einstein
&时,首先会运行这个错误: 2011-03-02 21:45:10.165:INFO::无 JSP 支持 /,未找到 org.apache.jasper.servlet.JspServlet 2011-03-02 21:45:10.248:INFO::通过 org.eclipse.jetty.util.log.StdErrLog 记录到 StdErrLog::DEBUG=false - einstein
然后我点击任意键,服务器就会正常启动。 - einstein
这不太正确,我想。如果您只是使用“&”符号运行进程,则该进程仍绑定在您的终端会话上。您需要使用“nohup”命令来解除进程的绑定,就像Dmytro提到的那样。 - onigunn
尝试添加start.jar的完整路径。例如,它位于/opt/jetty - java -jar /opt/jetty/start.jar&。 - onigunn
是的,抱歉。我在我的答案中添加了“nohup”。 - Matthew Gilliard

4
尝试使用“nohup java -jar start.jar &”命令,并且我已经在之前的问题中提到过。

好的,现在它可以工作了!非常感谢。但是我该如何关闭它呢?虽然我不需要经常关闭我的服务器,但是我需要运行 java -jar start.jar &Ctrl + C 吗? - einstein

1
您可以将其正确安装为Linux服务(如果您实际连接到Linux服务器)。
进入Jetty文件夹,例如我的是:
cd /home/spydon/jetty/

他们实际上已经在jetty.sh文件中完成了大部分工作,因此将其复制到/etc/init.d/。
sudo cp ./bin/jetty.sh /etc/init.d/jetty

然后用你喜欢的文本编辑器(如vim或nano)打开文件

sudo vim /etc/init.d/jetty

起初,只需取消注释(即删除#号)三行类似于以下内容的语句:

 #chkconfig: 3 99 99
 #description: Jetty 9 webserver
 #processname: jetty

同时,您打开文本编辑器时,还需将Jetty主目录添加到文件开头,我的文件如下所示:
#!/usr/bin/env bash  
#
# Startup script for jetty under *nix systems (it works under NT/cygwin too).
JETTY_HOME=/home/spydon/jetty

# To get the service to restart correctly on reboot, uncomment below (3 lines):
# ========================
 chkconfig: 3 99 99
 description: Jetty 9 webserver
 processname: jetty
# ========================

实际上,您不需要取消注释这三行代码才能使其工作,只需添加jetty_home即可。但是,为了正确部署,您可能应该修复这些行。

现在,您应该能够使用以下命令启动它:

sudo /etc/init.d/jetty start

如果您希望它在每次启动时运行,只需添加以下内容。
sudo ln -s /etc/init.d/jetty /etc/rc1.d/K99jetty
sudo ln -s /etc/init.d/jetty /etc/rc2.d/S99jetty

这应该适用于大多数现代发行版,但我只在基于Debian的系统上尝试过。

1

您可以将Jetty设置为服务运行...这里是LinuxWindows的说明。这样,您就不必每次通过终端启动Jetty。


1

如何终止进程:

1)Java风格

启动Jetty时:

java -DSTOP.PORT=8077 -DSTOP.KEY=secret_key_only_admin_know -jar start.jar

停止时:

java -DSTOP.PORT=8077 -DSTOP.KEY=secret_key_only_admin_know -jar start.jar -stop

注:端口可以是任意的,但启动和停止命令必须使用相同的端口 :)

2)Linux风格

通过PID终止进程


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接