Linux 中的后台进程

2022-09-01 22:42:29

我已经开发了一个Java套接字服务器连接,工作正常。

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

即使终端被用户从jar文件启动的位置关闭,我也需要继续。

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


答案 1

有几种方法可以实现这样的事情:

  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

答案 2

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

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

现在,您可以关闭终端。


推荐