Запуск процессов Java с помощью Upstart

Я хочу запустить процесс Java с помощью Upstart. В настоящее время на наших серверах OpenSuSE я использую систему инициализации System V, но на наших серверах Ubuntu я бы предпочел использовать Upstart. Но у меня есть два вопроса ...

У меня есть задание Upstart (задача) для настройки сервера, которое называется, скажем, myconfig. И в работе, которая запускает мои процессы Java, якобы имею:

start on stopped myconfig
exec /path/to/myjavastartscript.sh

myjavastartscript.sh выполняет 'java -classpath blah MyClass'. В инициализации System V при запуске службы выполняется «nohup /path/to/myjavastartscript.sh & amp;».

Итак, мой первый вопрос: нужно ли мне выполнять nohup или run-in-background с командой exec?

При запуске MyClass запускает другие процессы Java. В инициализации System V остановка службы просто ищет Java-процессы, принадлежащие определенному пользователю, и убивает их. Мой второй вопрос: как я могу контролировать завершение этих процессов с помощью Upstart?

6
задан 13 July 2012 в 07:31

2 ответа

Вы не должны использовать nohup с тех пор, когда Выскочка запустит программу, тот процесс не будет связан с терминалом (по умолчанию).

Для Выскочки я предложил бы любого просто наличие вызова задания:

exec java -classpath blah MyClass

... или гарантируя, что/path/to/myjavastartscript.sh звонит:

exec java -classpath blah MyClass

Обратите внимание что первое exec выше Новомодная строка файла конфигурации, тогда как 2-м является ключевое слово оболочки. Если Ваш сценарий оболочки не называет версию оболочки exec, необходимо будет стараться удостовериться установку Выскочки expect строка файла конфигурации правильно - видит http://upstart.ubuntu.com/cookbook/#expect.

Относительно остановки сервиса Выскочка автоматически уничтожит процесс, который это отслеживает (основной процесс JVM, связанный с MyClass) и любые дети того процесса (технически любой процесс в той же группе процесса (см. http://upstart.ubuntu.com/cookbook/#stopping-a-job)).

Без большего количества деталей я не уверен Ваш start on условие подходит - по-видимому, Вы хотите задание MyClass, запускаются, если и только если конфигурационный файл был установкой? Если так, стандартная идиома для заданий pre-start строка файла конфигурации для чтения в /etc/default/MyClass.conf. Если это решает, что или файл не существует, или файл конфигурации так или иначе указывает, что сервис отключен / не, устанавливают правильно, pre-start может просто звонить stop остановить задание от (полностью) стартового (см. http://upstart.ubuntu.com/cookbook/#pre-start). Преимущество этого подхода, являющегося, что Ваш start on условие может затем быть надежно установлено к любому набору условий, должен заставить задание запускаться. Когда те условия будут соблюдать, Выскочка выполнит задание; предварительный запуск выполнит, решит, что конфигурация еще не действительна, и просто выйдите. День администратор действительно решает настроить сервис, задание, полностью запустится.

См. http://upstart.ubuntu.com/cookbook/#determining-the-start-on-condition-ubuntu-specific и http://upstart.ubuntu.com/cookbook/#ubuntu-well-known-events-ubuntu-specific для определения start on состояние.

Обратите внимание наконец, что необходимо действительно всегда указывать a stop on условие также. См. http://upstart.ubuntu.com/cookbook/#stop-on.

4
ответ дан 13 July 2012 в 07:31

У меня была та же проблема: я хотел запустить сервер Serviio dlna при загрузке моей машины.

Это мой /etc/init/serviio.conf:

description "Start serviio DLNA server"
author "aanno"

start on net-device-up IFACE=eth0
stop on runlevel [!2345]
env enabled=1

setuid tpasch
setgid tpasch

#respawn the process if it crashes
respawn

env SERVIIO_HOME=/home/tpasch/serviio-1.0.1
script
        [ "$enabled" = "1" ] || [ "$force_start" = "1" ] || exit 0
        # Setup Serviio specific properties
        JAVA_OPTS="-Djava.net.preferIPv4Stack=true -Djava.awt.headless=true -Dderby.system.home=$SERVIIO_HOME/library -Dserviio.home=$SERVIIO_HOME -Xmx512M -Xms20M -XX:+UseParNewGC -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20"

        # construct classpath
        cd $SERVIIO_HOME
        CLASSPATH="config"

        for i in lib/*.jar; do
                CLASSPATH="$CLASSPATH:$i"
        done

        exec /usr/bin/java $JAVA_OPTS -classpath $CLASSPATH org.serviio.MediaServer
end script
0
ответ дан 13 July 2012 в 07:31

Другие вопросы по тегам:

Похожие вопросы: