Ich habe zwei Anforderungen für meine Java-Anwendung. Wenn sie stirbt, starte sie neu. Wenn der Server neu startet, starte ihn neu - ganz einfach. Verwendung der Antwort aquí Ich habe ein Skript, das neu gestartet wird, wenn die Java-Anwendung stirbt.
#!/bin/bash
until java -Xms256m -Xmx768m -jar MyApp.jar; do
echo "MyApp crashed with exit code $?. Respawning... " >&2
sleep 5
done
Ich kann dies mit "nohup restart_script.sh &" ausführen und es läuft den ganzen Tag lang ohne Probleme. Nun zur Startanforderung. Ich habe das /etc/init.d/crond-Skript genommen und die crond-Binärdatei durch mein Skript ersetzt, aber es bleibt beim Start hängen.
#!/bin/bash
#
# Init file for my application.
#
. /etc/init.d/functions
MYAPP=restart\_script.sh
PID\_FILE=/var/run/myapp.pid
start(){
echo -n "Starting My App"
daemon --user appuser $MYAPP
RETVAL=$?
echo
\[ $RETVAL -eq 0 \] && touch /var/lock/subsys/myapp
return $RETVAL
}
stop(){
echo -n "Stopping my application"
killproc $MYAPP
RETVAL=$?
echo
\[ $RETVAL -eq 0 \] && rm -f /var/lock/subsys/myapp
return $RETVAL
}
...
case "$1" in
start)
start
;;
stop)
stop
;;
...
esac
Wenn ich /sbin/service myapp start ausführe, startet das Skript, aber die Konsole bleibt hängen. Ich habe es mit "daemon --user appuser nohup $MYAPP &" versucht und bin sofort zur Eingabeaufforderung zurückgekehrt, ohne eine [OK]-Anzeige, und wenn ich ein ps ausführe, sehe ich immer noch, dass das Init-Skript hängt. Hat jemand eine Idee, wie man ein Skript innerhalb des Init-Skripts aufruft und es dazu bringt, richtig zurückzukehren?
Danke,
Greg