- ベストアンサー
こんなのDOSバッチで組めるでしょうか
WindowsNT4sp5です。 タスクスケジューラで朝から晩まで数分おきに動いている既存のDOSバッチがあり、そのなかで起動しているあるプログラムがたまにハングアップしてバッチがそこで止まったままになることがあります。 プログラムの性格上、そうなるとサーバーの再起動が必要でして、手動で行っています。 本来そのプログラム自体をなんとかするのが当たり前なのですが、事情があってそれは出来ません。 で、リモートからではありますがいちいち手動で再起動するのが面倒なので、そうなった場合に自動でサーバーを再起動させたいと思います。 プログラムは通常5分程度で終了するので、プログラムの処理の前行にATコマンドを書いて現在時刻の10分後とかにシャットダウンスケジュールをし、プログラム処理の後行にそのスケジュールを消す事を考えました(他にATは無いのでID0のスケジュールを消すコマンドを書く)。しかしこの場合、「現在時刻の10分後の時間でスケジュール」という部分がどうやったらいいのかわかりません。 別にATにこだわるつもりもないのですが、サードパーティ製のプログラム(フリー含む)は使えません。マイクロソフト物であればリソースキットもサーバーツールも使えるのですが・・ このような事を達成できる方法や情報をお持ちの方がいらしたら是非おしえていただけませんでしょうか。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>3はsleep.exeというリソースキットだかサーバーツールだかのオプションプログラムがありますので可能です(既存バッチ内でも使っています)。VBScriptでも使用可能かはわかりませんが。 そういえば、リソースキットにありましたね。Sleep.exe。 で、同期、非同期の実行は#4の方がかかれているとおり、startコマンドで処理可能ですので、バッチだけで実現可能ですね。 ということで、sleep.exeとstartコマンドを使い、#3のような2つのバッチを作ればOKかな?
その他の回答 (4)
- notnot
- ベストアンサー率47% (4900/10358)
>DOSバッチ内のコマンド記述で2のような「別バッチを起動してその終了を待たずに次の行へ行く」が出来ればとは考えていたのですが、 >DOSバッチって必ず一行を終わらせて次へ行くという性質だった気がしたので、これはあきらめていました・・ >Dosバッチでそれが出来れば解決かなとは思いますが。 start コマンドで起動すれば完了を待たずに次のBATの行が実行されます。詳しくは start /? 参照。 例:start "" "C:\WINNT\SYSTEM32\notepad.exe" >VBScriptを動かす為に必要な環境、ファイル、アプリ、手順等々、簡単で結構ですのでご教示いただければと思います 少なくともWin2K以降なら標準装備なんですが、NT4ではどうだったか?CSCRIPT.EXE WSCRIPT.EXEというプログラムがあれば、スクリプトを書くだけで使えます。無ければ下記のMSのサイトから「Windows Script 5.6 日本語版」をダウンロードできます。 WSHをキーワードに検索すればいろいろ解説サイトもあります。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
あと、処理方法の案も。 1.ATより定期的にスクリプト1を実行 2.起動したスクリプト1より、アプリを実行するスクリプト2(バッチでも可)を実行。終了は待たない(非同期)。 3.スクリプト1で10分待つ。 4.スクリプト2でアプリを実行。終了を待つ(同期)。終了したら終了フラグとなるファイルを作成しておく。 5.スクリプト1が10分たって再開したら、終了フラグの有無をチェックする。 6.フラグがあったらそのまま終了。フラグがなかったらリブート開始。 #普通のバッチコマンドだけですと、3ができないんですよねぇ。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>マイクロソフト物であればリソースキットもサーバーツールも使えるのですが・・ ということでしたら、VBScriptを使うのが一番手っ取り早いかと。 もちろんMS純正ですし。
補足
ありがとうございます。 >VBScriptを使うのが一番手っ取り早いかと。 知識不足で申し訳ありません。DOSバッチはかなり知っているつもりですが、VBScriptというのは使った事がありません。これってDOSバッチファイルへ記述するという形のみで使えるのでしょうか? 新たにアプリをインストールしたりライブラリ?を追加したりというのはちょっと出来ない環境なのですが・・ プログラムファイル単体を追加してバッチからそのプログラムを動かすくらいなら可能なのですが。
- grumpy_the_dwarf
- ベストアンサー率48% (1628/3337)
ちょっとした思いつきですが、 同じ間隔で2つのタスクをスケジュールします。Aは今使ってるヤツ、 Bは再起動のタスクです。 で、Aは処理の最初で適当な環境変数に1をセットし、処理が完了した ら0をセットして終わることにしておき、Bは環境変数が1だった時だ け再起動するようにしておきます。 こんな感じでどうでしょう。環境変数の代わりに特定のファイルの有 無でもいいかもしれません。
お礼
ありがとうございます。主バッチの次の起動時間(前のバッチは終わっているはずの時間)に、別の監視バッチによって終わっているかどうか確認して終わっていなかったらリブートするという方法ですね。きっといけますね! ただ、出来れば新しいタスクは作りたくなかったのですが・・なぜならバッチ実行しているサーバーは離れた場所にあるので、リモートからすべてを済ませたかったのでした(^^;(当初の説明不足ですみません) 新しいタスクスケジュールの設定はローカルログオンしないと出来ませんよね(度々すみませんが出来る方法があったら教えてください)。
補足
度々ありがとうございます。 3はsleep.exeというリソースキットだかサーバーツールだかのオプションプログラムがありますので可能です(既存バッチ内でも使っています)。VBScriptでも使用可能かはわかりませんが。 DOSバッチ内のコマンド記述で2のような「別バッチを起動してその終了を待たずに次の行へ行く」が出来ればとは考えていたのですが、DOSバッチって必ず一行を終わらせて次へ行くという性質だった気がしたので、これはあきらめていました・・Dosバッチでそれが出来れば解決かなとは思いますが。 VBScriptというのだとそのような事が出来るのですね。 教えていただいた事を実現させる為にVBScriptを考えるのも一策かと思いますので、VBScriptを動かす為に必要な環境、ファイル、アプリ、手順等々、簡単で結構ですのでご教示いただければと思います(自分でもこれから調べに行ってきます)。