保持 Linux 子系统服务永远运行

保持 Linux 子系统服务永远运行

我创建了一个子系统文件,它运行我创建的 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 应用程序编写为守护进程。当您关闭终端时,即使是后台进程也会终止。

相关内容