У меня есть два требования для моего приложения Java. Если он умирает, перезапустите его. Если сервер перезагрузится, перезапустите его - достаточно просто. Используя ответ здесь У меня есть скрипт, который будет перезапущен, когда умирает Java-приложение.
#!/bin/bash
until java -Xms256m -Xmx768m -jar MyApp.jar; do
echo "MyApp crashed with exit code $?. Respawning... " >&2
sleep 5
done
Я могу запустить это с "nohup restart_script.sh &", и он будет работать весь день без проблем. Теперь для требования запуска. Я взял скрипт /etc/init.d/crond и заменил двоичный файл crond своим скриптом, но он зависает при запуске.
#!/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
Когда я запускаю / sbin / service myapp start, скрипт запускается, но консоль зависает. Я попробовал "daemon --user appuser nohup $ MYAPP &", и я сразу же вернулся к приглашению без указания [OK], и когда я делаю ps, я все еще вижу, что init завис. Любые идеи, как вызвать сценарий в сценарии инициализации и заставить его вернуться правильно?
Спасибо
Грег