Я создал файл подсистемы, который запускает созданную мной 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, потому что через некоторое время они перестают работать.
Спасибо!
Вам нужно написать свое Java-приложение как демон. Даже фоновые процессы могут прекратиться, когда вы закроете терминал.
Вам нужно фоновый процесс в вашем сценарии инициализации. В строке, в которой выполняется программа, используйте амперсанд &
после имени процесса.
Вы можете показать нам сценарий?