前置き
自ブログに投稿した記事の転載です。
本日の投稿は、冬休み前にやっておきたいことベストワンな、エラー時の自動復旧ネタです。
当協会では、Windows7のタスクスケジューラ機能と合せ技で、FileMaker Proの定時タスクを実行させています。
もちろん、FileMaker Serverでタスク実行をおこなっているものもあるのですが、どうしても、スクリプトの互換性の関係によって、とか、クライアントのWindows端末に入れているあれやこれやとの連携をおこなうために、とかで、FMPで実行しないといけないタスクというものが出てきてしまいます。
基本的には、問題なく動いてくれているのですが、時折、クラッシュしてくれることがありまして(時折、というか、結構な頻度……)
そういう時、人間側が能動的に察知してFMPのプロセスをkillしてあげたりする必要があるのですが、冬休みに入るとそんなこともやっていられないですよね、というお話。
いや、冬休みじゃなくてもエラーからの手動復旧なんて嫌なので、自動化できる限りで自動化を試みましょう。
FileMakerProがクラッシュしたときのエラーログを見る
まず、FileMakerProがクラッシュしたときに、どんなエラーログが出ているのかを見つけます。
以下の通りです。
- イベントビューアー
- Windows ログ
- アプリケーション
- エラーが出ている行
- アプリケーション
- Windows ログ
その行の中を見てみると、
- 全般タブ
- 例外コード
- 0xc0000005
- 障害オフセット
- 0x0005168a
- 例外コード
- 詳細タブ
- EventData
- FileMaker Pro.exe
- EventData
となっているはずです。
たぶん、FMPがクラッシュした時の例外コードと障害オフセットは全部これのはず、たぶん……
FileMaker Pro.exeプロセスをkillするbatを作る
問題は、クラッシュすると、 FileMaker Pro.exe というプロセスが居残ってしまって、次の新しい指令をタスクスケジューラが実行しようとしても、何も起こらなくなる……ということなので、何はともあれこやつめをkillすることが必要です。
任意のディレクトリにbatファイルを作成します。
中身は、
taskkill /im "FileMaker Pro.exe" /F
です、 /F つけて強制終了にしましょう。
Windowsでアプリケーションエラーを感知する
Windows Vita以後だと、タスクスケジューラに、システムログをトリガ設定できるようになっているようなので、それを利用します。
- タスク スケジューラ
- タスクの作成
で、まずはタスクを作ります。
続けて、
- 全般タブ
- 任意の名前を入れる
で、タスク条件を、 トリガータブ > 新規 > トリガーの編集 の後で、
- タスクの開始 : イベント時
- 設定 : カスタム
- イベント フィルターの編集
- フィルター
- ログの日付 : 指定なし
- イベント レベル : エラー
- ログごと : イベント ログ
- Windows ログ
- Application
- Windows ログ
- フィルター
- イベント フィルターの編集
最後に、実行タスクとして作成したbatを指定。
操作タブ > 新規 で、
- 操作
- プログラムの開始
- 設定
- プログラム/スクリプト
- 作ったbatファイルのpath
- 開始(オプション)
- 作ったbatファイルを置いているディレクトリのpath
- プログラム/スクリプト
これで完了です。エラーが出たらプロセスを自動killしてくれるようになりました。
安穏として休暇を過ごせるはずです。
……しかし、世の中そんなに甘くはない。
エラーも吐かずにプロセスが居残ってしまう場合の対応
万が一、エラーログを吐かずにor通常終了したのに、FileMaker Pro.exeプロセスが不本意に居残り続けてしまったら、どうしたらいいでしょう。
そんなことがあるのかって?
残念ながらあるんです、本当に残念ながら、ええ……
そんなのどうしようもない?
諦めたらそこで試合終りょry
相手がそんなわけのわからない強引なことをしてくるのであれば、こちらも強引に対応しましょう。スケジューリングに問題のないタイミングで、上記作成のプロセス強制killのbatを実行してあげればよいのです。
当協会ではとりあえず、毎日、00:58、12:58というタイミングで、一日二回、実行するように設定してあります。万が一居残ってしまっても、最悪、このタイミングでリフレッシュはしてくれます。
もうちょっと良い状態監視ができるとよいのですが……この点についてのベストプラクティスをお持ちの方がいらしたら、是非、教えてください。
それでは皆様、どうぞよいお年をお迎えください。