【发布时间】:2015-06-18 13:59:25
【问题描述】:
在 Java 和 Jetty 应用程序部署方面,我是新手。我使用默认设置来设置我的码头服务并在我的终端窗口上运行java -jar start.jar。服务器按预期运行,但是当我关闭终端时它停止了。这是正常的吗?我之前使用过 XAMPP,你可以毫无问题地关闭终端。我该如何克服这个问题,每个人都需要偶尔关闭个人电脑。
顺便说一句,我正在使用 mac。
【问题讨论】:
在 Java 和 Jetty 应用程序部署方面,我是新手。我使用默认设置来设置我的码头服务并在我的终端窗口上运行java -jar start.jar。服务器按预期运行,但是当我关闭终端时它停止了。这是正常的吗?我之前使用过 XAMPP,你可以毫无问题地关闭终端。我该如何克服这个问题,每个人都需要偶尔关闭个人电脑。
顺便说一句,我正在使用 mac。
【问题讨论】:
听起来您正在使用 ssh 或类似的东西在远程 Linux/Unix 服务器上启动 Jetty。
因此,您可以使用nohup java -jar start.jar & - nohup 将防止您的进程在您注销时被通常的 Unix“挂断”信号 (ref) 停止,& 会将码头作为后台进程,因此您可以输入 exit 或其他任何内容以注销。
如果您希望能够重新连接到 Jetty 终端,我建议您阅读 GNU screen。
如果您想再次优雅地停止码头,我真的建议将其用作服务,或使用screen 以避免丢失终端。但如果为时已晚,您可以在 jps -l 的输出中找到 PID,然后调用 kill $PID。
【讨论】:
java -jar start.jar &
&它首先运行此错误:2011-03-02 21:45:10.165:INFO::NO JSP Support for /,没有找到 org.apache.jasper.servlet。 J spServlet 2011-03-02 21:45:10.248:INFO::Logging to StdErrLog::DEBUG=false via org.eclipse.jetty.util.log.StdErrLog
尝试“nohup java -jar start.jar &”
我已经在上一个问题中说过了)
【讨论】:
java -jar start.jar & 和Ctrl + C 吗?
如何杀死进程:
1)java风格
何时启动码头:
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杀死进程
【讨论】:
您也可以将其正确安装为 linux 服务(如果您实际连接到 linux 服务器)。
cd 到你的码头文件夹,例如我的是:
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 的发行版上尝试过。
【讨论】: