1

シェル スクリプトから (Java) プログラムを起動するベスト プラクティスに関するアドバイスを求めています。

現在、私たちの会社では、すべての環境変数を設定し、次のようなバックグラウンドで Java (この場合は重要ではありません) プロセスを起動するシェル スクリプトを使用しているようです。

nohup $JAVA_CMD > $LOG_DIR/$LOG_FILE 2>&1 &

これはスクリプトの最後の行です。単一プロセスを開始しています。

私が持っている1つの疑問は、そのようなシェルプロセスの戻りコードは、例外/エラーのためにプログラムが起動に失敗した場合でも常に0であるということです. これにより、ツールの監視が困難になります。たとえば、ツールはシェルの終了コードに依存できません。

これは、プロセスが次のように終了するのを待つことで修正できることがわかりました。

nohup $JAVA_CMD > $LOG_DIR/$LOG_FILE 2>&1 &
wait $!

しかし、私の理解では、これにより、&実行してから最後が完全に役に立たなくなるということです:

nohup $JAVA_CMD > $LOG_DIR/$LOG_FILE 2>&1

同じ効果があります。

私の質問は、シェルからプログラムを起動するベストプラクティスは何ですか? バックグラウンドでの実行には、見落としている利点がありますか?

4

1 に答える 1

0

at と batch、そして場合によっては cron を調べる必要があります。これらはすべて、コマンド スクリプトやジョブ ストリームを非対話的に実行するためのツールです。at はジョブを実行し、標準エラー出力をユーザーに電子メールで送り返します - デフォルトの動作です。

at -k now <<!
$JAVA_CMD > $LOG_DIR/$LOG_FILE 2>&1
!

バッチ コマンドを使用すると、一連のコマンドをファイルに書き込み、そのファイルを stdin のように実行できます。これを対話的に行うこともできます。

cron ジョブ (crontab) は、毎週月曜日の 0200 のように、指定された日時に実行されます。これはあなたの質問に合わないようです。

これを試して:

http://www.thegeekstuff.com/2010/06/at-atq-atrm-batch-command-examples/
于 2013-02-14T13:18:53.187 に答える