我已经开发了一个Java套接字服务器连接,它运行良好。
当从终端启动时,它开始侦听客户端。但是,当我关闭终端时,它停止侦听。
我需要即使从启动jar文件的终端被用户关闭,也能够继续运行。
如何在Linux中将Java服务器套接字应用程序作为后台进程运行?
有几种方法可以实现这样的事情:
nohup java -server myApplication.jar > /log.txt
- 直截了当,只是将应用程序放在后台。 这个方法可行,但不是很好。init.d
中,并要求常规启动,停止和状态命令的运行级别。如果需要,我可以提供示例。就我个人而言,如果您需要在将来使用此服务器和/或将其分发给客户、最终用户等,则会选择方案2或3。 如果您需要运行某些东西并且没有时间为问题开发更复杂的解决方案,则可以使用nohup
。
关于第二种方法:
最好的脚本可在此处找到,许多项目都在使用它。
对于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
&
后,您需要执行一个关键步骤。该进程仍与终端连接。运行java命令后,您需要运行 disown 。
java -jar yourApp.jar > log.txt &
disown
现在,您可以关闭终端。
java -jar yourApp.jar > log.txt &
而不是在结尾加上&
。 - wired00尝试,
java -jar yourApp.jar &
&
将启动新的进程线程。我还没有测试过,但如果仍然无法正常工作,则在脚本文件中使用&
启动它。java -jar mySocketApp.jar &
你还可以使用 bg 和 fg 命令将进程发送到后台和前台。你可以通过按下CTRL+Z来暂停正在运行的进程。
对于我来说,运行终端并使进程在后台持续运行的简单快捷方式是在命令末尾使用&!
:
$ java -jar yourApp.jar &!
# st is my terminal like kitty alacritty
$ st -e bash -c "lookatme --style one-dark --one $1" &!
步骤 1。
创建新屏幕
screen -RD screenname
步骤2。
进入屏幕终端
按Enter键
步骤3。
在新打开的终端中运行您的命令或脚本(在后台运行)
步骤4。
退出屏幕终端
ctrl + A + D
步骤5。
列出屏幕终端
screen -ls
将会打印出类似以下的内容
屏幕上有:
994.screenname (12/10/2018 09:24:31 AM) (已分离)
/run/screen/S-contact 中有1个套接字。
步骤6.
登录到后台进程
screen -rd 994.screenname