ピティナ開発者ブログ

全日本ピアノ指導者協会のIT担当者が気まぐれにつづる技術系中心のブログです


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

前置き

Hiroyuki Noguchiです。
早いもので、もう2016年も最後のブログ記事投稿となりました。本日の投稿は、冬休み前にやっておきたいことベストワンな、エラー時の自動復旧ネタです。

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

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

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

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

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

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

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

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

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

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

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

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

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

taskkill /im "FileMaker Pro.exe" /F

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

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

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

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

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

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

で、タスク条件を、

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

最後に、実行タスクとして作成したbatを指定。

  • 操作タブ
    • 新規
      • 操作
        • プログラムの開始
      • 設定
        • プログラム/スクリプト
          • 作ったbatファイルのpath
        • 開始(オプション)

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

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

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

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

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

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

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

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

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

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

(著: Hiroyuki Noguchi)
この記事は現在0人が閲覧中