1. 遭遇した問題分散プロジェクトの展開プロセスでは、サーバーの再起動後にアプリケーション(データベースを含む)を自動的に復元できることが求められることがよくあります。docker 2. 解決策シェルスクリプトを使用して制御します。考え方は次のとおりです。 データベース ポートを検出して、データベースが正常に起動したかどうかを確認します。データベースが正常に起動したら、構成センターとサービス登録センターのポートを検出して、正常に起動したかどうかを確認します。データベースと構成センターが起動したら、他のマイクロサービス アプリケーションを起動します。 3. ポート検出ポート検出に使用するコマンドは
ホスト: 対象ホストのIPアドレス port: サービスがリッスンするポート サービスが開始されている場合、このコマンドは 200 を返します。それ以外の場合は何も返しません。 4. シェルスクリプトコードを直接貼り付けます。使用される構成センターはnacosです。 #!/bin/bash #chkconfig: 2345 80 90 #説明:autoStartMaintenanceService.sh # #前提: #1. コンピュータの電源がオンになると、Docker が自動的に起動できる必要があります。#2. Docker は、運用および保守サービスを正常に開始できます。#3. このスクリプトは、マイクロサービスが配置されているマシンで実行する必要があります。# ##変更が必要な構成-----開始##データベースが配置されているマシンの IP データベースホスト=192.169.1.52 ##データベースリスニングポート DATABASE_PORT=3306 ##マイクロサービスが配置されているマシンのIP ローカルホスト=192.169.1.46 ##マイクロサービス アクセス ポート Maintenance_Port=8180 ##NACOS が配置されているマシンの IP NACOS_HOST=192.169.1.82 ##NACOS リスニングポート NACOS_PORT=8848 ##マイクロサービス コンテナ名 (NAMES 列) メンテナンスコンテナ名="umc-maintenance" ##スクリプトによって生成されたログパス Log_Path=/home/test/log ## 変更が必要な設定 ----- 終了 ## ##ループ遅延時間 (秒) LOOP_TIME=5 時刻 ="" 日付: 時刻を取得する() { at_time="$(日付 +%Y-%m-%d-%H:%M:%S) --- " at_date=$(日付 +%Y-%m-%d) } 自動開始Webサービス() { ##ログパスが存在しない場合は作成します if [ ! -d "$Log_Path" ]; then mkdir -p $ログパス フィ 真実である一方、 ##データベースが起動しているかどうかを判断します req_message=$(nc -w 1 ${DATABASE_HOST} ${DATABASE_PORT} </dev/null && echo "200") if [ -n "$req_message" ]; then 取得時刻 echo "$at_time データベースが実行中です" >>${Log_Path}/"$at_date"_autoStartMaintenanceService.log waitNacos開始 それ以外 取得時刻 echo "$at_time データベースは実行されていません。データベースが起動するまでお待ちください" >>${Log_Path}/"$at_date"_autoStartMaintenanceService.log スリープ $LOOP_TIME フィ 終わり } ##Nacosが起動したか判断する waitNacosStarting() { req_message=$(nc -w 1 ${NACOS_HOST} ${NACOS_PORT} </dev/null && echo "200") テスト$((req_message)) -eq 200;の場合 取得時刻 echo "$at_time Nacos が実行中です" >>${Log_Path}/"$at_date"_autoStartMaintenanceService.log メンテナンスサービスの開始 スリープ $LOOP_TIME それ以外 取得時刻 echo "$at_time Nacos は実行されていません。nacos が起動するまでお待ちください" >>${Log_Path}/"$at_date"_autoStartMaintenanceService.log スリープ $LOOP_TIME フィ } ##マイクロサービスを開始する startMaintenanceService() { req_message=$(nc -w 1 ${LOCAL_HOST} ${Maintenance_Port} </dev/null && echo "200") テスト$((req_message)) -eq 200;の場合 取得時刻 echo "$at_time メンテナンスサービスが実行中です" >>${Log_Path}/"$at_date"_autoStartMaintenanceService.log それ以外 container_id=$(docker ps -a | grep $Maintenance_Container_Name | grep -v grep | awk '{print $1}') 取得時刻 echo "$at_time メンテナンスサービスコンテナ ID は ${container_id} です" >>${Log_Path}/"$at_date"_autoStartMaintenanceService.log docker を起動 ${container_id} フィ } 自動開始Webサービス 5. シェルの入力と出力のリダイレクトこのスクリプトを書いている間、ブロガーはシェルの入力と出力のリダイレクトにも慣れてきました。 通常、各 Unix/Linux コマンドは実行時に 3 つのファイルを開きます。
コマンドの説明 stdout と stderr をマージしてファイルにリダイレクトする場合 (つまり、正しい情報とエラー情報の両方をファイルに出力する場合)、次のように記述できます。 コマンド > ファイル 2>&1 またはコマンド >> ファイル 2>&1 /dev/null ファイル /dev/null は特別なファイルです。そこに書き込まれたものはすべて破棄されます。そこから読み取ろうとすると、何も得られません。ただし、/dev/null ファイルは非常に便利です。コマンドの出力をこのファイルにリダイレクトすると、出力が無効になります。 参照する 初心者向けチュートリアル - シェル これで、Docker コンテナの起動順序を制御する Shell スクリプトに関するこの記事は終了です。関連する Shell スクリプトによる Docker 制御のコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Linux ホスト上で複数の MySQL データベースを起動する方法
1.まずMysqlリンク設定ページを書く パッケージ com.wretchant.fredis.me...
MySQL を使用して中国語の文字を挿入すると、多くの友人から次のエラーが報告されます。 これは、文...
おすすめの読み物: MySQL 8.0.19 は、間違ったパスワードを 3 回入力するとアカウント ...
SQL を最適化する必要があるのはなぜですか?当然ですが、SQL ステートメントを記述する場合、次の...
Nginx はバージョン番号を非表示にする実稼働環境では、セキュリティ上の脆弱性の漏洩を避けるために...
記事「MySQL の最適化: キャッシュの最適化」では、システムによってコンパイルされた変数値、また...
モバイル ブラウザは、Web ページを仮想の「ウィンドウ」(ビューポート) に配置します。このウィン...
目次01 InnoDBレプリカセットの紹介02 InnoDBレプリカセットの制限03 導入前に知って...
目次1. シンプルなページの例2.uni-appはvueコンポーネントとミニプログラムネイティブコン...
通常の開発では、凸型の丸い角、つまり border-radius 属性を使用するのが一般的です。凹角...
MySQL は比較的使いやすいリレーショナル データベースです。今日は、win10 システムを再イ...
目次1要素オフセットシリーズ1.1 オフセットの概要1.2 オフセットとスタイルの違い視覚領域クライ...
目次序文1. MySQL メインストレージエンジン: 2. さまざまなストレージエンジンがテーブルを...
ハッシュ結合ハッシュ結合は実行にインデックスを必要とせず、ほとんどの場合、現在のブロックネストループ...
フレームセットと本文は同じレベルにあるため、本文にフレームセットを配置することはできません。まずペー...