【问题标题】:Jetty server stops running after closing terminal windowJetty 服务器在关闭终端窗口后停止运行
【发布时间】:2015-06-18 13:59:25
【问题描述】:

在 Java 和 Jetty 应用程序部署方面,我是新手。我使用默认设置来设置我的码头服务并在我的终端窗口上运行java -jar start.jar。服务器按预期运行,但是当我关闭终端时它停止了。这是正常的吗?我之前使用过 XAMPP,你可以毫无问题地关闭终端。我该如何克服这个问题,每个人都需要偶尔关闭个人电脑。

顺便说一句,我正在使用 mac。

【问题讨论】:

    标签: java macos jetty


    【解决方案1】:

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

    因此,您可以使用nohup java -jar start.jar & - nohup 将防止您的进程在您注销时被通常的 Unix“挂断”信号 (ref) 停止,& 会将码头作为后台进程,因此您可以输入 exit 或其他任何内容以注销。

    如果您希望能够重新连接到 Jetty 终端,我建议您阅读 GNU screen

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

    【讨论】:

    • 您有没有输入错误的字符?我没有得到它的工作,服务器启动但我无法关闭我的终端。我在 Eclipse RSE 终端中使用 SSH 顺便说一句。我按你说的输入了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 命令解耦进程,就像 Dmytro 提到的那样。
    • 尝试添加 start.jar 的完整路径。例如。它位于 /opt/jetty - java -jar /opt/jetty/start.jar &
    【解决方案2】:

    尝试“nohup java -jar start.jar &”

    我已经在上一个问题中说过了)

    【讨论】:

    • 好的,现在可以了!谢谢真的很感激。但是我该如何关闭它?并不是说我需要关闭我的服务器那么多,而是我运行java -jar start.jar &Ctrl + C 吗?
    【解决方案3】:

    您可以将码头设置为作为服务运行...这是linuxwindows 的说明。这样,您就不必担心每次通过终端启动码头。

    【讨论】:

      【解决方案4】:

      如何杀死进程:

      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杀死进程

      【讨论】:

        【解决方案5】:

        您也可以将其正确安装为 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 的发行版上尝试过。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-08-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-03-22
          • 2014-09-24
          相关资源
          最近更新 更多