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を使用してこれらのプロセスの終了をどのように制御できますか?
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 を参照してください。
同じ問題があり、マシンの起動時に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