01-22-2015, 06:28 PM
★point
sc コマンドでWindowsサービスの管理を行える
ある本番サーバ環境と、その待機サーバの間で、夜間バッチにて、データベースの同期をとる際、
単純に、本番のDBからエクスポートしたダンプファイルを、待機サーバに送り、インポートする、
つまり、単純に上書きをするとします。
しかし、もし障害が発生し、待機側のDBが「正しい」状態になっていたら、
本番サーバから上書きしてはいけないことになります。
その「上書きしていいかどうか」の判断として、
『本番サーバのサービス(ApacheTomcat)が動いて』いたら、
待機サーバが運用されているものとして、本番から上書きを行わない、
という方式を考えてみました。
この場合に、本番サーバから、待機サーバのサービスの状態を確認するには、
下記のようなコードでいけそうです。
ちなみに、この「sc コマンド」は、サービスの状態だけでなく、
サービスの開始や停止なども行えます。
ちなみに、サービスのインストールは、
.NETのインストール用ユーティリティ(InstallUtil.exe)で、できるみたいです。
例:
"C:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe" サービス名
sc コマンドでWindowsサービスの管理を行える
ある本番サーバ環境と、その待機サーバの間で、夜間バッチにて、データベースの同期をとる際、
単純に、本番のDBからエクスポートしたダンプファイルを、待機サーバに送り、インポートする、
つまり、単純に上書きをするとします。
しかし、もし障害が発生し、待機側のDBが「正しい」状態になっていたら、
本番サーバから上書きしてはいけないことになります。
その「上書きしていいかどうか」の判断として、
『本番サーバのサービス(ApacheTomcat)が動いて』いたら、
待機サーバが運用されているものとして、本番から上書きを行わない、
という方式を考えてみました。
この場合に、本番サーバから、待機サーバのサービスの状態を確認するには、
下記のようなコードでいけそうです。
Code:
@Echo Off
Call :DoesRunningService "1 STOPPED"
Call :DoesRunningService "4 RUNNING"
Exit /B
::--------------------------------------
::サービスの状態を確認をするサブルーチン
::--------------------------------------
:DoesRunningServic
SET service=Tomcat7
sc \\133.170.235.90 query %service% | FindStr -C:%1>NUL
If ERRORLEVEL 1 ( Echo %service% : %1 NG ) Else (Echo %service% : %1 OK )
Exit /B
ちなみに、この「sc コマンド」は、サービスの状態だけでなく、
サービスの開始や停止なども行えます。
ちなみに、サービスのインストールは、
.NETのインストール用ユーティリティ(InstallUtil.exe)で、できるみたいです。
例:
"C:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe" サービス名