У меня есть два требования для моего приложения 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 запускаются, сценарий запускает, но подвешивает консоль. Я судил "демона - пользователь appuser nohup $MYAPP и", и я сразу возвращаюсь к подсказке без любого [OK] признак и когда я делаю PS, я все еще вижу, что init подвешивается. Какие-либо идеи, как назвать сценарий в рамках init сценария и заставить его возвращаться правильно?
Спасибо,
Greg
Функция демона на моей машине (старый RedHat) не возвращается, пока не вернется выполненная программа. Итак, вам нужно, чтобы ваш небольшой служебный скрипт выполнял разветвление.
Попробуйте написать свою утилиту следующим образом:
#!/bin/bash
(
until java -Xms256m -Xmx768m -jar MyApp.jar; do
echo "MyApp crashed with exit code $?. Respawning... " >&2
sleep 5
done
) &
Как это работает. Помещение команды в круглые скобки запускает код, выполняемый в новом процессе. Вы помещаете процесс в фоновый режим, чтобы исходный процесс вернулся, не дожидаясь его.
Вам нужна обертка от java, вот очень хорошая... tanuki
Я хочу сказать, что вам не нужно изобретать колесо заново, там есть инструменты...