- - PR -
別サーバーで自動的にイベントドリブンなコマンドを実行するには
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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コマンドは利用できますので) なにかいい方法はありますでしょうか? |
|
投稿日時: 2006-11-29 17:45
こんにちは。
総合運用管理ソフトの導入案など如何でしょうか。 本件ばかりでなく、これまでも運用周りの相談が多いように感じるので局所的な 対応を考えるより効率的かと思われます。 → 結構高価な製品が多いですが、システム運用に関わる作業工数の低減等まで 考慮すれば十分投資に見合うケースは多いです。 急に言われても困るとは思いますが、来年度予算に計上して頂くよう働きかけて も良さそうに感じます。 |
|
投稿日時: 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 ] |
|
投稿日時: 2006-12-01 03:54
BackDoorさん、
ちゃっぴさん ありがとうございます。 確かに管理ソフトをかったほうがいいかもしれないですね。 パソコン1台程度の値段であればぜひ買いたいと思います。 車1台程度であると、この3台のマシンのバッチ目的だけ ではちょっとむづかしいかもしれませんが ちゃっぴさんのサイトを参考にして サービスに起動、停止はできました ありがとうございました ただ、プログラムの起動に難航して |
|
投稿日時: 2006-12-01 03:54
BackDoorさん、
ちゃっぴさん ありがとうございます。 確かに管理ソフトをかったほうがいいかもしれないですね。 パソコン1台程度の値段であればぜひ買いたいと思います。 車1台程度であると、この3台のマシンのバッチ目的だけ ではちょっとむづかしいかもしれませんが ちゃっぴさんのサイトを参考にして サービスに起動、停止はできました ありがとうございました ただ、プログラムの起動に難航して |
|
投稿日時: 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