Ich habe heute eine ganze Weile damit zugebracht eine in JAVA geschriebene Serverapplikation für BenchIT per init Skript zum laufen zu bringen. Leider musste ich feststellen das sich dies nicht ohne weiteres mit start-stop-daemon realisieren lässt und habe im Laufe des Tages mit viel Hilfe von Google mein erstes eigenes init Skript gebaut.

Funktional ist es nur eine einfache Variante zum starten, stoppen und neustarten des Servers, zum Beenden lässt sich ohne Probleme wieder start-stop-daemon einsetzen, nur zum starten ist es nicht geeignet.

#! /bin/sh
#
# javaserver    Initscript for a JavaServer
#

set -e

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/JServer/
DESC="BenchIT JavaServer"
NAME=javaserver
DAEMON_OPTS="-Xmx64m"
DAEMON="/usr/bin/java -server $DAEMON_OPTS"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

# Gracefully exit if the package has been removed.
test -x /usr/bin/java || exit 0

#
#       Function that starts the daemon/service.
#
d_start() {
        $DAEMON &> /dev/null & echo $! > $PIDFILE
}

#
#       Function that stops the daemon/service.
#
d_stop() {
        start-stop-daemon --stop --quiet --pidfile $PIDFILE
        rm $PIDFILE
}

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: $SCRIPTNAME {start|stop|restart}" >&2
        exit 1
        ;;
esac

exit 0

Bei dieser Gelegenheit viel mir noch eine unschöne Problematik von JAVA unter Linux auf. Für ein gestartetes Programm werden immer mehrere Prozesse gestartet, mit einem pstree findet man aber schnell herraus das diese vielen Prozesse alle vom ersten gestarteten Prozess abhängen, es reicht also den ersten auch zu killen damit alle Prozesse wieder entschwinden!