1. ホーム
  2. スクリプト・コラム
  3. リナックスシェル

シェルスクリプトでJavaのjarプログラムを起動/停止する方法

2022-02-07 12:59:41

この記事では、シェルスクリプトを使用してバックグラウンドでjarプログラムを開始および停止する方法と、アウトラージファイルスライシングを実装する方法について説明します。また、バックグラウンドでのランタイムのヒントも追加します。

起動スクリプト:start_upload.sh

#! /bin/sh
nohup java -jar UploadSchedule.jar >> /usr/local/tomcat9/webapps/upload-to-oss/nohup_upload.out 2>&1 &
echo $! > /var/run/UploadSchedule.pid


 起動スクリプトの説明です。

1. バックグラウンド実行をオンにして、プログラムが生成したログファイルをアウトファイルに書き出す。
2. 2. 停止スクリプトで使用するために、現在のプロセスIDを/var/run/UploadSchedule.pidに書き込んで、現在のプロセスを停止させる。

停止スクリプト:stop_upload.sh

#! /bin/sh
PID=$(cat /var/run/UploadSchedule.pid)
kill -9 $PID


 スクリプトの記述を停止します。

1. まず、プロセスIDを取得します。
2、次に、そのプロセスを強制終了します。

ファイルスライス:split_nohup.sh

プログラムがバックグラウンドで途切れることなく実行され続けると、生成されたログもアウトクエリーに出力され続け、アウトファイルのサイズがどんどん大きくなっていきます。このままでは、outファイルをもとにログを参照する必要がある場合、非常に不便です。そこで、定期的に当日のアウトファイルを日付ごとにスライスして小さくすることで、エラーの処理と場所の特定を容易にします。

#! /bin/bash
log_path=/usr/local/tomcat9/webapps/upload-to-oss

if [ -f "$log_path/nohup_upload.out" ];then
current_date=`date -d "-1 day" "+%Y%m%d"`
cp $log_path/nohup_upload.out $log_path/nohup_upload_${current_date}.out
cat /dev/null > $log_path/nohup_upload.out
split -b 5242880 -d -a 4 $log_path/nohup_upload_${current_date}.out $log_path/nohup_upload_${current_date}_
rm -rf $log_path/nohup_upload_${current_date}.out
fi

スクリプトの記述をスライスして表示します。

1. outファイルが存在する場合、nohup_upload.outファイルのコピーを作成し、nohup_upload_current_dateという名前にします(例:nohup_upload_20200328.out)。
2. nohup_upload.out ファイルを空にします。
3. nohup_upload_20200328.out ファイルをスライスして、スライス後のファイル名を nohup_upload_20200328_0001, nohup_upload_20200328_0002 という形式でファイル名を付けます。

  • -b 各小型ファイルのサイズ(バイト)を指定します。
  • -d サフィックスを数字で表す
  • -a サフィックスの長さを指定する

4. 元のファイル(nohup_upload_20200328.out)を削除してください。

open/stopコマンドを実行する

# Start
. /start_upload.sh

# Stop
. /stop_upload.sh

バックグラウンドで動作させるためのいくつかのヒント

&とnohupの違い。

&はバックグラウンドで動作していることを意味します。つまり、. /start_upload.sh &を実行しているときに、Ctrl + Cを使用しても、start_upload.shは実行されます(SIGINTシグナルに免疫があるため)。しかし、シェルを直接閉じると、start_upload.shのプロセスも消えてしまうので注意が必要です。なぜなら、SIGHUP信号の影響を受けないからです。

nohupはSIGHUPシグナルを無視するようになっているので、nohupを実行すると./start_upload.sh を実行すると、シェルを閉じても start_upload.sh プロセスが残っています(SIGHUP シグナルに影響されない)。しかし、シェルで直接 Ctrl + C を使用すると、start_upload.sh プロセスも消滅します (SIGHUP シグナルに免疫がないため)。

そこで、シェルでのCtrl + Cとシェルのシャットダウンの影響を本当に受けないプロセスにするために、nohupと&を同時に使用します。

今回の記事は、シェルスクリプトを使ってJavaのjarプログラムを起動/停止する方法についてです。シェルを使ってjarプログラムを起動/停止する方法については、スクリプトハウスの過去記事を検索するか、以下の記事を引き続き閲覧してください。