LoginSignup
3
0

More than 5 years have passed since last update.

WindowsでFileMakerProのアプリケーションエラーが出たらプロセスを自動killする

Posted at

前置き

自ブログに投稿した記事の転載です。
本日の投稿は、冬休み前にやっておきたいことベストワンな、エラー時の自動復旧ネタです。

当協会では、Windows7のタスクスケジューラ機能と合せ技で、FileMaker Proの定時タスクを実行させています。

もちろん、FileMaker Serverでタスク実行をおこなっているものもあるのですが、どうしても、スクリプトの互換性の関係によって、とか、クライアントのWindows端末に入れているあれやこれやとの連携をおこなうために、とかで、FMPで実行しないといけないタスクというものが出てきてしまいます。

基本的には、問題なく動いてくれているのですが、時折、クラッシュしてくれることがありまして(時折、というか、結構な頻度……)
そういう時、人間側が能動的に察知してFMPのプロセスをkillしてあげたりする必要があるのですが、冬休みに入るとそんなこともやっていられないですよね、というお話。

いや、冬休みじゃなくてもエラーからの手動復旧なんて嫌なので、自動化できる限りで自動化を試みましょう。

FileMakerProがクラッシュしたときのエラーログを見る

まず、FileMakerProがクラッシュしたときに、どんなエラーログが出ているのかを見つけます。

以下の通りです。

  • イベントビューアー
    • Windows ログ
      • アプリケーション
        • エラーが出ている行

その行の中を見てみると、

  • 全般タブ
    • 例外コード
      • 0xc0000005
    • 障害オフセット
      • 0x0005168a
  • 詳細タブ
    • EventData
      • FileMaker Pro.exe

となっているはずです。
たぶん、FMPがクラッシュした時の例外コードと障害オフセットは全部これのはず、たぶん……

FileMaker Pro.exeプロセスをkillするbatを作る

問題は、クラッシュすると、 FileMaker Pro.exe というプロセスが居残ってしまって、次の新しい指令をタスクスケジューラが実行しようとしても、何も起こらなくなる……ということなので、何はともあれこやつめをkillすることが必要です。

任意のディレクトリにbatファイルを作成します。
中身は、

taskkill /im "FileMaker Pro.exe" /F

です、 /F つけて強制終了にしましょう。

Windowsでアプリケーションエラーを感知する

Windows Vita以後だと、タスクスケジューラに、システムログをトリガ設定できるようになっているようなので、それを利用します。

  • タスク スケジューラ
    • タスクの作成

で、まずはタスクを作ります。

続けて、

  • 全般タブ
    • 任意の名前を入れる

で、タスク条件を、 トリガータブ > 新規 > トリガーの編集 の後で、

  • タスクの開始 : イベント時
  • 設定 : カスタム
    • イベント フィルターの編集
      • フィルター
        • ログの日付 : 指定なし
      • イベント レベル : エラー
      • ログごと : イベント ログ
        • Windows ログ
          • Application

最後に、実行タスクとして作成したbatを指定。
操作タブ > 新規 で、

  • 操作
    • プログラムの開始
  • 設定
    • プログラム/スクリプト
      • 作ったbatファイルのpath
    • 開始(オプション)
      • 作ったbatファイルを置いているディレクトリのpath

これで完了です。エラーが出たらプロセスを自動killしてくれるようになりました。
安穏として休暇を過ごせるはずです。

……しかし、世の中そんなに甘くはない。

エラーも吐かずにプロセスが居残ってしまう場合の対応

万が一、エラーログを吐かずにor通常終了したのに、FileMaker Pro.exeプロセスが不本意に居残り続けてしまったら、どうしたらいいでしょう。

そんなことがあるのかって?
残念ながらあるんです、本当に残念ながら、ええ……

そんなのどうしようもない?
諦めたらそこで試合終りょry

相手がそんなわけのわからない強引なことをしてくるのであれば、こちらも強引に対応しましょう。スケジューリングに問題のないタイミングで、上記作成のプロセス強制killのbatを実行してあげればよいのです。

当協会ではとりあえず、毎日、00:58、12:58というタイミングで、一日二回、実行するように設定してあります。万が一居残ってしまっても、最悪、このタイミングでリフレッシュはしてくれます。

もうちょっと良い状態監視ができるとよいのですが……この点についてのベストプラクティスをお持ちの方がいらしたら、是非、教えてください。

それでは皆様、どうぞよいお年をお迎えください。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0