![保持 Linux 子系统服务永远运行](https://linux22.com/image/602101/%E4%BF%9D%E6%8C%81%20Linux%20%E5%AD%90%E7%B3%BB%E7%BB%9F%E6%9C%8D%E5%8A%A1%E6%B0%B8%E8%BF%9C%E8%BF%90%E8%A1%8C.png)
我创建了一个子系统文件,它运行我创建的 java 程序。子系统文件位于 /etc/init.d 中,允许我使用一致的界面(启动和停止)停止和启动服务。它基于本教程:http://www.tldp.org/HOWTO/HighQuality-Apps-HOWTO/boot.html
脚本如下:
#!/bin/sh
#
# /etc/init.d/mysystem
# Subsystem file for "MySystem" server
#
# chkconfig: 2345 95 05
# description: MySystem server daemon
#
# processname: MySystem
# config: /etc/MySystem/mySystem.conf
# config: /etc/sysconfig/mySystem
# pidfile: /var/run/MySystem.pid
# source function library
. /etc/rc.d/init.d/functions
# pull in sysconfig settings
[ -f /etc/sysconfig/mySystem ] && . /etc/sysconfig/mySystem
RETVAL=0
prog="MySystem"
.
.
.
start() {
echo -n $"Starting $prog:"
java -jar /bin/app.jar
RETVAL=$?
[ "$RETVAL" = 0 ] && touch /var/lock/subsys/$prog
echo
}
stop() {
echo -n $"Stopping $prog:"
.
.
.
killproc $prog -TERM
RETVAL=$?
[ "$RETVAL" = 0 ] && rm -f /var/lock/subsys/$prog
echo
}
reload() {
echo -n $"Reloading $prog:"
killproc $prog -HUP
RETVAL=$?
echo
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
reload)
reload
;;
condrestart)
if [ -f /var/lock/subsys/$prog ] ; then
stop
# avoid race
sleep 3
start
fi
;;
status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart|reload|condrestart|status}"
RETVAL=1
esac
exit $RETVAL
问题是,当我关闭与服务器的终端会话后,此服务就会停止运行。如何让该服务在后台永远运行?
我不想使用屏幕或 nohup,因为它们会在一段时间后超时。
谢谢!
答案1
您需要在 init 脚本中将该进程置于后台。在执行程序的行中,&
在进程名称后使用“与”符号。
你能给我们看一下剧本吗?
答案2
您需要将 Java 应用程序编写为守护进程。当您关闭终端时,即使是后台进程也会终止。