- PR -

別サーバーで自動的にイベントドリブンなコマンドを実行するには

1
投稿者投稿内容
きのこ
ぬし
会議室デビュー日: 2004/09/01
投稿数: 256
投稿日時: 2006-11-29 11:35
Windows 2003で
DBサーバー1台 (MS SQL)

別のIISをのせたWEBサーバー、
さらに別の
アプリケーションサーバーが1台あります。
アプリケーションは簡単なパッケージでDOSコマンドで
独自スクリプトを起動させることが可能です。

これらに対して夜間バッチで順繰りに

1.
IISをとめ、アプリケーションサーバーもサービスをとめる

2.
DBでデータを更新

3.
終わったら、WEBサーバーのIISを起動〔別マシン)
また、アプリケーションの独自のスクリプトを動かして
サービス起動

というながれで夜間バッチをくみたいのですが
1から2は 基本的にすぐに終わるのである程度、
時間の目安でそれどれのマシン別にスケジューラーで
くめるのですが、
DBサーバーのバッチは所要時間ばらつくが多く
できればすべて、
DBサーバーからコマンドを発行したいと思ってます。


サービスの起動停止は
コントロールパネル⇒管理ツール⇒コンピュータの管理 アプレットで
別のコンピュータへ接続、
からAマシンに接続してサービスを停止するとかできるようなので
WMIなので、この操作をWSHとかでスクリプト化してみる
(以前の書き込み印用)
などで対応できたとしても

アプリケーションサーバーにしてはいっていないコマンド
〔もちろんアプリケーションサーバー自体からはDOS起動可能)を
別のDBサーバーのOSからDBのデータJOBが終わり次第イベント
ドリブンで起動する、
〔当然、アプリケーションサーバーのCPUで処理しなければなりませんが)
ことは可能なのでしょうか?
TELNETをいれないとやはりだめでしょうか?
平文を利用したくないのでそうであればSSHを利用するか、
原始的ですがDBサーバーからフラッグファイルを作成して
それを、アプリケーションサーバー、自身の時間スケジュールで
時間がちかくなったら定期的にチェックするという方法
を考えてます。

ただ簡単にもっとスマートにできるのならば
そうしたいと思ってます。
WEB、DB,アプリ、3つのサーバーにまたがる
自動バッチJOBのながれを1つのスケジューラーでコントロール
したいと思ってます。(SQLサーバーのJOBでOSコマンドは利用できますので)

なにかいい方法はありますでしょうか?
BackDoor
ぬし
会議室デビュー日: 2006/02/20
投稿数: 831
投稿日時: 2006-11-29 17:45
こんにちは。

総合運用管理ソフトの導入案など如何でしょうか。
本件ばかりでなく、これまでも運用周りの相談が多いように感じるので局所的な
対応を考えるより効率的かと思われます。
→ 結構高価な製品が多いですが、システム運用に関わる作業工数の低減等まで
  考慮すれば十分投資に見合うケースは多いです。

急に言われても困るとは思いますが、来年度予算に計上して頂くよう働きかけて
も良さそうに感じます。
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2006-11-29 21:11
これ、event driven でやる必要ありますか?

control 用の batch を書いてやればいいだけじゃないの?
順番に実行されるように。

あ、別の server を扱うのね。
なら、WMI で serveice 制御すればいいでしょう。

http://msdn2.microsoft.com/en-gb/library/aa394418.aspx

[追記]
DB で更新する job をやめて ADO とかで更新してやるという手も使えると思います。
こちらは default で入っていますから。

あ、とかいていたところ、全部 DB server 上で実行させればいいんじゃないの?
Service の停止・再開は WMI で remote から操作できます。
[/追記]

[ メッセージ編集済み 編集者: ちゃっぴ 編集日時 2006-11-29 21:17 ]
きのこ
ぬし
会議室デビュー日: 2004/09/01
投稿数: 256
投稿日時: 2006-12-01 03:54
BackDoorさん、
ちゃっぴさん

ありがとうございます。
確かに管理ソフトをかったほうがいいかもしれないですね。
パソコン1台程度の値段であればぜひ買いたいと思います。
車1台程度であると、この3台のマシンのバッチ目的だけ
ではちょっとむづかしいかもしれませんが

ちゃっぴさんのサイトを参考にして
サービスに起動、停止はできました
ありがとうございました
ただ、プログラムの起動に難航して

きのこ
ぬし
会議室デビュー日: 2004/09/01
投稿数: 256
投稿日時: 2006-12-01 03:54
BackDoorさん、
ちゃっぴさん

ありがとうございます。
確かに管理ソフトをかったほうがいいかもしれないですね。
パソコン1台程度の値段であればぜひ買いたいと思います。
車1台程度であると、この3台のマシンのバッチ目的だけ
ではちょっとむづかしいかもしれませんが

ちゃっぴさんのサイトを参考にして
サービスに起動、停止はできました
ありがとうございました
ただ、プログラムの起動に難航して

きのこ
ぬし
会議室デビュー日: 2004/09/01
投稿数: 256
投稿日時: 2006-12-01 03:58
BackDoorさん、
ちゃっぴさん

ありがとうございます。
確かに管理ソフトをかったほうがいいかもしれないですね。
パソコン1台程度の値段であればぜひ買いたいと思います。
車1台程度であると、このサーバー3台のマシンの
連携したイベントドリブンバッチ目的だけ
ではちょっとむづかしいかもしれませんが

ちゃっぴさんのサイトを参考にして
サービスに起動、停止はできました
ありがとうございました
ただ、プログラムの起動に難航してます

http://msdn2.microsoft.com/en-gb/library/aa389388.aspx
から

=========
Const SW_NORMAL = 1
strComputer = "."
strCommand = "Notepad.exe"
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")

' Configure the Notepad process to show a window
Set objStartup = objWMIService.Get("Win32_ProcessStartup")
Set objConfig = objStartup.SpawnInstance_
objConfig.ShowWindow = SW_NORMAL

' Create Notepad process
Set objProcess = objWMIService.Get("Win32_Process")
intReturn = objProcess.Create _
(strCommand, Null, objConfig, intProcessID)
If intReturn <> 0 Then
Wscript.Echo "Process could not be created." & _
vbNewLine & "Command line: " & strCommand & _
vbNewLine & "Return value: " & intReturn
Else
Wscript.Echo "Process created." & _
vbNewLine & "Command line: " & strCommand & _
vbNewLine & "Process ID: " & intProcessID
End If
========
を応用してますが、
引く数がはいると、なぜかうまくいきません。
ためしで
notepad.exe
のかわりにテストで
net.exe view >> C:\test.txt
をしてますが、自分のマシンでももちろん
他のマシンに対しても実行できません。
実際には他のマシンにしかインストールしてない
ベンダーのアプリをコマンドラインで動かすのですが・・・
1

スキルアップ/キャリアアップ(JOB@IT)