web-dev-qa-db-ja.com

Upstartを使用したJavaプロセスの開始

Upstartを使用してJavaプロセスを開始したい。現在、OpenSuSEサーバーではSystem V initシステムを使用してこれを実現していますが、UbuntuサーバーではUpstartを使用したいです。しかし、私は2つの質問があります...

たとえば、myconfigと呼ばれるサーバーを構成するUpstartジョブ(タスク)があります。そして、私のJavaプロセスを開始するジョブでは、表面上は次のようになります。

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

myjavastartscript.shは「Java -classpath blah MyClass」を実行します。 System V initでは、サービスを開始すると「Nohup /path/to/myjavastartscript.sh&」が実行されます。

だから私の最初の質問は、まだexecコマンドでNohupを実行する必要があるか、バックグラウンドで実行する必要があるかということです。

実行すると、MyClassは他のJavaプロセスを開始します。 System V initでは、サービス停止は特定のユーザーが所有するJavaプロセスを探し、それらを強制終了します。 2番目の質問は、Upstartを使用してこれらのプロセスの終了をどのように制御できますか?

6
user265330

Nohupを使用する必要はありません。Upstartがプログラムを実行すると、そのプロセスは端末に関連付けられないためです(デフォルト)。

Upstartについては、単に電話をかけることをお勧めします。

exec Java -classpath blah MyClass

...または/path/to/myjavastartscript.shが呼び出すことを確認:

exec Java -classpath blah MyClass

上記の最初のexecはUpstartスタンザであり、2番目はShellキーワードであることに注意してください。シェルスクリプトがexecのシェルバージョンを呼び出さない場合は、Upstart expectスタンザを正しく設定するように注意する必要があります- http://upstart.ubuntuを参照してください.com/cookbook /#expect

サービスの停止に関して、Upstartは、追跡しているプロセス(MyClassに関連付けられたメインJVMプロセス)およびそのプロセスの子(技術的には同じプロセスグループ内の任意のプロセス( 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条件を、ジョブを開始する条件のセットに確実に設定できることです。これらの条件が満たされると、Upstartはジョブを実行します。事前開始が実行され、構成がまだ有効でないと判断され、単純に終了します。管理者がサービスの構成を決定した日に、ジョブは完全に開始されます。

http://upstart.ubuntu.com/cookbook/#determining-the-start-on-condition-ubuntu-specific および http://upstart.ubuntu.com/cookbook /#ubuntu-well-known-events-ubuntu-specificstart on条件を決定するため。

最後に、stop on条件も常に指定する必要があることに注意してください。 http://upstart.ubuntu.com/cookbook/#stop-on を参照してください。

4
jamesodhunt

同じ問題があり、マシンの起動時に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
3
aanno