投稿時間:2006/05/29(Mon) 19:26 投稿者名:MAKO
Eメール:
URL :
タイトル:VBの常駐処理で、突然改名が不可能に・・・・
一日中色々調べてはみたものの、原因が分からず質問させて頂きます。 なにぶん素人に近い状態なので、うまく説明出来るか分かりませんが、ご了承下さい。
環境 OS:Windows2000 開発:VB6.0
「A」という、VB6.0で作成した常駐プログラムがあります。 「A」は、フォームを持っていません。 SleepとDoeventsを利用し、ループを繰り返しながら動いております。 トリガーファイル(Web画面より作成)が存在したならば別のプログラムを 実行する仕様です。実行後、再度ループを繰り返します。
この「A」が、ハングアップ(処理が固まる)する現象が稀に起きると いう事で、「A」に年月日時分秒をつけた起動ファイルを吐き出させるようにしました。 この起動ファイルは、Name関数を利用しループ毎に改名するようにしました。 ex)A_20060529182630.txt
「A」の起動ファイルを監視する、常駐プログラム「B」をVB6.0で 作成しました。こちらも、SleepとDoeventsと利用した処理です。 「B」は、「A」が吐き出す起動ファイルの年月日時分秒を調査し、 一定時間以上過ぎていたら、「A」に対し、リブートを行います。
テスト時は、うまく動きました。 いざ本番稼動を始めると、しばらくはうまく動いて いたのですが(この時は2時間くらい)、突然「A」の起動ファイルの改名が出来なくなりました。 ※トリガーファイルをおいても目当てのプログラムの起動すらしない状態。固まってる? 当然「B」が「A」のリブートを行います。この際、「A」の起動ファイルを削除します。 「A」が起動し、起動ファイルを作成します。しかし、改名が行われない。 ※改名1回目で固まっている? ※この時も、トリガーファイルをおいても起動プログラムの起動すらしない状態。
実際の処理の内容は下記のようになっております。
<Aの内容> 起動ファイル作成 Do While (True) 起動ファイル改名 IF トリガーファイル存在 Then 目当てのプログラム起動 End If Sleep(2000) Doevents Loop
<Bの内容> Do While (True) A起動ファイル取得 IF 現在時刻 − A起動ファイルの時刻 > 一定時間 Then 「A」をリブート 「A」の起動ファイル削除 End If Sleep(3000) Doevents Loop
突然ファイルの改名が出来なくなる現象の理由が分かりません。 ※エラーログなどは出ていませんでした。 はじめはうまくいっていた事から、起動ファイル改名時に、ファイルが使用中に なっているわけではないと思っております。 サーバの再起動もしたのですが、それでも、解決しなかったので、 今は「A」だけを動かしております。 なぜか、「A」だけならば正常に処理される。(改名も正常に行われる) 開発時に数日動かし続けた事もあり、単純な問題では ないな〜と色々調べてはみたのですが、原因が分かりませんでした。
説明がヘタクソで分かり辛いかもしれませんが、原因に心あたりのある方、教えて下さい。 開発で再現すらしない状態です。こうしたら、再現するかも?的な事で大歓迎です。
※ちなみに、実際には「B」も起動ファイルを吐き出し、「C」のプログラムが「B」を監視。 「B」も「C」を監視と少々ややこしい作りになっております。「A」を監視しているのは 「B」だけです。
説明へたくそで、長くなってしまい申し訳ありません。
|