linux中的后台进程

use*_*973 23 java sockets linux process

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

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

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

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

Łuk*_*nek 32

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

  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
Run Code Online (Sandbox Code Playgroud)


sky*_*nic 6

&在命令末尾添加a后,您需要做一件至关重要的事情.该过程仍与终端相关联.您需要disown在运行java命令后运行.

java -jar yourApp.jar > log.txt &
disown
Run Code Online (Sandbox Code Playgroud)

现在,您可以关闭终端.