Linux の一般的な Java プログラム起動スクリプトのコード例

Linux の一般的な Java プログラム起動スクリプトのコード例

シェルを起動する頻度は非常に低いですが。 。 。しかし、書くたびに、多くの jar ファイル パスを処理する必要があり、新しい jar パッケージを追加するときに起動シェルを変更する必要があります。

インターネット上で優れた汎用シェル スクリプトを見つけました。

いくつかの設定変数を変更するだけで、起動スクリプトとして使用できます。

起動はもちろん、シャットダウンや再起動、稼働中かどうかの確認もサポートしています。

start 関数では、 nohup 部分を実際に取り出して構成変数に入れることができます。著者の原文をそのままここに貼り付けます

スクリプトコードは次のとおりです。

#!/bin/sh
#このスクリプトは、Linux 上で Java プログラムを起動するための一般的なスクリプトです。つまり、自己起動型サービス スクリプトと呼ぶことができます。
#Java プログラムを起動するスタンドアロン スクリプトとしても使用できます。
#
#著者: tudaxia.com、日付: 2011/6/7
#
#警告!!!: このスクリプトの停止部分では、システムの kill コマンドを使用して、指定された Java プログラム プロセスを強制的に終了します。
#プロセスを強制終了する前に条件チェックは行われません。プログラムがファイルやデータベースに書き込む場合など、
#データが失われたり、不完全になる可能性があります。これを考慮する必要がある場合は、スクリプトを書き直す必要があります。
#kill コマンドを実行する前に一連のチェックを追加します。
#
#
###################################
#環境変数とプログラム実行パラメータ#これらのパラメータは、実際の環境と Java プログラム名に応じて変更する必要があります#####################################
#JDK パス JAVA_HOME="/usr/java/jdk"
 
#実行プログラムを起動するために使用するシステムユーザー。セキュリティ上の理由から、ルートアカウントを使用しないことをお勧めします。RUNNING_USER=root
 
#Javaプログラムが配置されているディレクトリ(クラスの上位ディレクトリ)
APP_HOME=/opt/tudaxia/test/WEB-INF
 
#起動する必要があるJavaメインプログラム(メインメソッドクラス)
APP_MAINCLASS = com.tudaxia.test.TestMain
 
#指定されたlibディレクトリ内のすべてのjarを含む完全なクラスパスパラメータをまとめます
クラスパス=$APP_HOME/classes
i in "$APP_HOME"/lib/*.jar; を実行します
  クラスパス="$クラスパス":"$i"
終わり
 
#java 仮想マシンの起動パラメータ JAVA_OPTS="-ms512m -mx512m -Xmn256m -Djava.awt.headless=true -XX:MaxPermSize=128m"
 
###################################
#(関数) プログラムが起動されているかどうかを判定する#
#図示:
#JDKに付属するJPSコマンドとgrepコマンドの組み合わせを使用して、pidを正確に見つけます
#jps と l パラメータを合わせると、Java の完全なパッケージ パスが表示されます #awk を使用して、pid ($1 部分) と Java プログラム名 ($2 部分) を分割します
###################################
# psid変数を初期化する(グローバル)
0 の場合
 
チェックpid() {
  javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAINCLASS`
 
  [ -n "$javaps" ]の場合;
   psid=`echo $javaps | awk '{print $1}'`
  それ以外
   0 の場合
  フィ
}
 
###################################
#(関数) プログラムを起動する#
#図示:
#1. まず checkpid 関数を呼び出して $psid グローバル変数を更新します。#2. プログラムが起動している場合 ($psid が 0 でない場合)、プログラムが起動したことを示すプロンプトが表示されます。#3. プログラムが起動していない場合は、起動コマンド ラインを実行します。#4. 起動コマンドが実行された後、checkpid 関数を再度呼び出します。#5. ステップ 4 の結果でプログラムの pid を確認できた場合は [OK] を出力し、そうでない場合は [Failed] を出力します。
#注: echo -n は文字を印刷した後に改行しないことを意味します#注: 「nohup command>/dev/null 2>&1 &」の使用######################################
始める() {
  チェックPID
 
  [ $psid -ne 0 ]の場合;
   エコー "=========================================
   echo "警告: $APP_MAINCLASS はすでに開始されています! (pid=$psid)"
   エコー "=========================================
  それ以外
   echo -n "$APP_MAINCLASS を起動しています..."
   JAVA_CMD="nohup $JAVA_HOME/bin/java $JAVA_OPTS -classpath $CLASSPATH $APP_MAINCLASS >/dev/null 2>&1 &"
   su - $RUNNING_USER -c "$JAVA_CMD"
   チェックPID
   [ $psid -ne 0 ]の場合;
     echo "(pid=$psid) [OK]"
   それ以外
     echo "[失敗]"
   フィ
  フィ
}
 
###################################
#(関数) プログラムを停止する#
#図示:
#1. まず checkpid 関数を呼び出して $psid グローバル変数を更新します。#2. プログラムが起動している場合 ($psid が 0 でない場合)、停止を開始します。そうでない場合は、プログラムが実行されていないというプロンプトが表示されます。#3. kill -9 pid コマンドを使用して、プロセスを強制終了します。#4. kill コマンド ラインをすぐに実行し、前のコマンドの戻り値を確認します: $?
#5. ステップ 4 の結果 $? が 0 に等しい場合は [OK] を出力し、そうでない場合は [Failed] を出力します。
#6. Java プログラムが複数回起動されるのを防ぐために、プロセスを繰り返しチェックして強制終了する (stop を再帰的に呼び出す) 処理を追加します。
#注: echo -n は、文字を印刷した後に改行しないことを意味します#注: シェル プログラミングでは、「$?」は前のコマンドまたは関数の戻り値を意味します########################################
停止() {
  チェックPID
 
  [ $psid -ne 0 ]の場合;
   echo -n "$APP_MAINCLASS を停止しています...(pid=$psid) "
   su - $RUNNING_USER -c "kill -9 $psid"
   [ $? -eq 0 ]の場合;
     エコー "[OK]"
   それ以外
     echo "[失敗]"
   フィ
 
   チェックPID
   [ $psid -ne 0 ]の場合;
     停止
   フィ
  それ以外
   エコー "=========================================
   echo "警告: $APP_MAINCLASS は実行されていません"
   エコー "=========================================
  フィ
}
 
###################################
#(関数) プログラムの実行状態を確認する#
#図示:
#1. まずcheckpid関数を呼び出して$psidグローバル変数を更新します。#2. プログラムが起動している場合($psidが0でない場合)、プログラムが実行中であることを通知し、pidを表示します。
#3. そうでない場合、プログラムが実行されていないというメッセージが表示されます######################################
状態() {
  チェックPID
 
  [ $psid -ne 0 ]の場合;
   echo "$APP_MAINCLASS が実行中です! (pid=$psid)"
  それ以外
   echo "$APP_MAINCLASS は実行されていません"
  フィ
}
 
###################################
#(関数) システム環境パラメータを印刷する######################################
情報() {
  echo "システム情報:"
  エコー "********************************"
  `head -n 1 /etc/issue` をエコーし​​ます
  `uname -a` をエコーし​​ます
  エコー
  「JAVA_HOME=$JAVA_HOME」をエコーし​​ます
  `$JAVA_HOME/bin/java -version` をエコーし​​ます
  エコー
  「APP_HOME=$APP_HOME」をエコーし​​ます
  echo "APP_MAINCLASS=$APP_MAINCLASS"
  エコー "********************************"
}
 
###################################
#スクリプトの最初のパラメータ ($1) を読み取って判断します#パラメータ値の範囲: {start|stop|restart|status|info}
#パラメータが指定された範囲内にない場合は、ヘルプ情報を出力します#####################################
ケース「$1」
  '始める')
   始める
   ;;
  '停止')
   停止
   ;;
  '再起動')
   停止
   始める
   ;;
  '状態')
   状態
   ;;
  '情報')
   情報
   ;;
 *)
   echo "使用法: $0 {start|stop|restart|status|info}"
   出口1
エサック;

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Java プログラム (JSch) を使用してリモート Linux ホストでシェル スクリプトを実行する方法
  • js スクリプトで Java バックグラウンド コード メソッド分析を実行する
  • Java 実行 JS スクリプト ツール
  • シェル スクリプトと問題の概要を呼び出して実行する Java プログラム (推奨)
  • Javaリクエストを実行する場合、スクリプトの実行が終了してもJVMは終了できません。
  • Jmeter 呼び出し Java スクリプト プロセスの詳細な説明
  • シェルスクリプトでJavaプログラムjarを実行する方法
  • Java で JS スクリプト インジェクションを防ぐ方法

<<:  mysql5.6 の無効な utf8 設定の問題を解決する

>>:  Vue3+TypeScriptは再帰メニューコンポーネントの完全な例を実装します

推薦する

MySQL グリーン解凍バージョンのインストールと設定手順

手順: 1. MySQLデータベースをインストールする1. MySQL-5.6.17-winx64....

Mysql 文字列の傍受と指定された文字列内のデータの取得

序文: 正規表現のインターセプションに似た、MySql フィールドの文字列から特定の文字を抽出すると...

IE6 フォントを定義できません: 13px サイズは無効です。IE6 は自動的に大きいフォント ソリューションを表示します。

数日前、Web ページのモジュールを調整していたとき、ページのフォント サイズを 13px に設定し...

inline-blockプロパティとの互換性

<br />1年前、インターネット上にはinline-blockプロパティに関する記事は...

HTML フォームとフォーム内部タグの使用

コードをコピーコードは次のとおりです。 <html> <ヘッド> <t...

ミニプログラム開発ツールのソースコードからの基本実装の分析

目次ミニプログラム開発者ツールのソースコードを表示する方法ミニプログラムアーキテクチャ設計1. ミニ...

grep を使用して MySQL エラー ログ情報を取得する方法の詳細な説明

MySQL のメンテナンスを容易にするために、エラー情報を収集するためのインターフェースを提供するス...

Alibaba Cloud ESC サーバー シングルノード MySQL の Docker デプロイメント

1. msyqlの高速バージョンをダウンロードする docker pull hub.c.163.co...

HTML 終了タグの問題と W3C 標準

W3C の原則によれば、XML の各開始タグには対応する終了タグが必要です。つまり、<html...

Win10 + Ubuntu 16.04 デュアルシステム 完璧なインストールチュートリアル [詳細]

必ずデータをバックアップすることを忘れないでください。データは貴重なものです! ! !コンピュータモ...

HTML でのテキストエリアの使用と一般的な問題およびケース分析

textarea タグはよく使われる HTML タグです。主に長いテキストを入力するときに改行するた...

複数のパッケージソースから同時にパッケージをロードするようにnpmを設定する方法

目次1. ローカルストレージを構築する2. npmパッケージを作成し、プライベートリポジトリにアップ...

MySQL データベース インデックスが B+ ツリーの使用を選択するのはなぜですか?

MySQL データベース インデックスが B+ ツリーを使用する理由をさらに分析する前に、データ構...

jsは、州、市、地区の3レベルのリンクの非選択ドロップダウンボックスバージョンを実現します。

インターネットで3レベルリンクを検索したところ、すべてオプションで書かれていました。突然、別の方法で...

CSS3 フィルター属性の使い方の紹介

1. はじめにフロントエンドページのアニメーション効果を記述する場合、filter 属性は多かれ少な...