linux后台进程

新手上路,请多包涵

我开发了一个运行良好的 Java 套接字服务器连接。

当从终端启动时,它从监听客户端开始。但是当我关闭终端时,它会停止监听。

即使用户从启动 jar 文件的地方关闭了终端,我也需要继续。

如何在 Linux 中将 Java 服务器套接字应用程序作为后台进程运行?

原文由 user861973 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 531
2 个回答

有几种方法可以实现这样的目标:

  1. nohup java -server myApplication.jar > /log.txt - 这非常简单。它只会将应用程序置于后台。这会起作用,但这不是一个很好的方法。
  2. 使用 shell 包装器和上面的 OR 守护程序 应用程序。这种方法被许多开源项目使用,并且对于大多数场景来说都非常好。此外,它还可以包含在 init.d 以及具有常规启动、停止和状态命令的所需运行级别。如果需要,我可以提供示例。
  3. 使用 Java Service WrapperApache Jakarta Commons Daemon 构建您自己的守护进程服务器。同样 - 两者都非常受欢迎,经过充分测试且可靠。并且适用于 Linux 和 Windows!来自 Apache Commons 的一个被 Tomcat 服务器使用!此外还有 Akuma

如果您将来需要使用此服务器和/或将其分发给客户端、最终用户等,我个人会选择解决方案 2 或 3 nohup 如果您需要运行某些东西并且没有是时候为问题开发更复杂的解决方案了。

广告 2:

可以在 此处 找到许多项目使用的最佳脚本。

对于 Debian/Ubuntu,可以使用基于 start-stop-daemon 的非常简单的脚本。如果有疑问还有 /etc/init.d/skeleton 一个可以修改。

 #!/bin/sh

DESC="Description"
NAME=YOUR_NAME
PIDFILE=/var/run/$NAME.pid
RUN_AS=USER_TO_RUN
COMMAND=/usr/bin/java -- -jar YOUR_JAR

d_start() {
    start-stop-daemon --start --quiet --background --make-pidfile --pidfile $PIDFILE --chuid $RUN_AS --exec $COMMAND
}

d_stop() {
    start-stop-daemon --stop --quiet --pidfile $PIDFILE
    if [ -e $PIDFILE ]
        then rm $PIDFILE
    fi
}

case $1 in
    start)
    echo -n "Starting $DESC: $NAME"
    d_start
    echo "."
    ;;
    stop)
    echo -n "Stopping $DESC: $NAME"
    d_stop
    echo "."
    ;;
    restart)
    echo -n "Restarting $DESC: $NAME"
    d_stop
    sleep 1
    d_start
    echo "."
    ;;
    *)
    echo "usage: $NAME {start|stop|restart}"
    exit 1
    ;;
esac

exit 0

原文由 Łukasz Rżanek 发布,翻译遵循 CC BY-SA 3.0 许可协议

在命令末尾添加 & 之后,您需要做一件至关重要的事情。该过程仍然链接到终端。运行java命令后需要运行 disown

 java -jar yourApp.jar > log.txt &
disown

现在,您可以关闭终端。

原文由 skyronic 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏