Linux 中的后台进程
我已经开发了一个Java套接字服务器连接,工作正常。
从终端启动时,它从客户端侦听开始。但是当我关闭终端时,它停止了收听。
即使终端被用户从jar文件启动的位置关闭,我也需要继续。
如何在 Linux 中运行 Java 服务器套接字应用程序作为后台进程?
我已经开发了一个Java套接字服务器连接,工作正常。
从终端启动时,它从客户端侦听开始。但是当我关闭终端时,它停止了收听。
即使终端被用户从jar文件启动的位置关闭,我也需要继续。
如何在 Linux 中运行 Java 服务器套接字应用程序作为后台进程?
有几种方法可以实现这样的事情:
nohup java -server myApplication.jar > /log.txt
- 这是非常直截了当的。它只会将应用程序放在后台。这将起作用,但这不是一个很好的方法。init.d
就个人而言,如果您将来需要使用此服务器和/或将其分发给客户,最终用户等,我会选择解决方案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
在命令末尾添加 a 后,您需要执行一件至关重要的事情。该进程仍链接到终端。您需要在运行 java 命令后运行。&
disown
java -jar yourApp.jar > log.txt &
disown
现在,您可以关闭终端。