シェルを起動する頻度は非常に低いですが。 。 。しかし、書くたびに、多くの 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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: mysql5.6 の無効な utf8 設定の問題を解決する
>>: Vue3+TypeScriptは再帰メニューコンポーネントの完全な例を実装します
この記事では、動的なテーブル効果を実現するためのJavaScriptの具体的なコードを参考までに紹介...
XHTML CSS を使って Web ページをデザインし始めた頃は、タグの使用経験も少なく、あまり気...
従来のソフトウェアから Web ウェアへの段階的な移行の傾向の中で、デザイン パターンとテクノロジは...
この記事では、参考までに、jsで書かれたシンプルなスネークゲームの具体的なコードを紹介します。具体的...
1. MySQLは現在の日付と時刻を取得する関数1.1 現在の日付 + 時刻 (日付 + 時刻) ...
序文休日は終わっていますが、それは別の形で(お腹に触れることで)私たちに現れます。ミニプログラムでデ...
CSS レイアウトとスタイルに関する質問: 水平方向の中央揃えと最大幅の制限のバランスをとる方法最近...
目次1. 変数意味のある名前を使う不必要なコンテキストを追加しないようにするハードコードされた値を避...
[LeetCode] 196.重複したメールを削除するSQL クエリを記述して、Person とい...
背景レプリケーションはデータの完全なコピーです。レプリケーションが必要な理由として、まず思い浮かぶの...
最近、LAN 内のすべてのホスト名を一覧表示する必要があります (SMB プロトコル)。しかし、fi...
イメージを構築するこれまで、テストやデモンストレーションにさまざまなイメージを使用しました。多くの場...
Web サーバーは、独立したドメイン名を持つ複数の Web サイトを構築できるほか、通信経路上のトラ...
この記事では、ツリーテーブルを実装するためのVueの具体的なコードを例として紹介します。具体的な内容...
1. はじめにMYSQL の MDL ロックは常に頭痛の種でした。ロックについて話すとき、通常は I...