高速富士山にウォッチドッグタイマを

高速富士山なるプログラムは、Webカメラの画像からTime Lapseムービーを生成する巡回ロボットプログラムであり、その主な機能はライブカメラの画像をダウンロードするという至極単純なものである。

画像のダウンロードにはコマンドラインツールのcurlを使用。実にこれで安定稼働できないわけがない……………はずだった(汗)。

近頃巡回先に加えたライブカメラのおかげで、安定稼働できない今日このごろ。こともあろうにAppleScriptのプログラムのくせに応答がなくなったりする。どこで止まっているのか不明だが、放置状態で動かせていないのはまずい。

そこで、2つの対策を考えた。

1つは、アプリケーション版の高速富士山(未公開)からの技術のフィードバック。アプリケーション版では、複数のライブカメラからのダウンロードを、一括で行うようになっている。なんということはない、do shell scriptで呼び出すコマンドを数珠つなぎにして一括呼び出しするだけなのだが、これがたいへん実行速度向上にプラスになる。だいたい、PowerPC G4/867程度のマシンでも100カ所程度のライブカメラの巡回が可能になる。100カ所のダウンロードが1分以内に完了するというわけだ。

そこまで徹底する必要があるかどうかは疑問だったので、とりあえず非同期実行オプションをこれでもか! これでもか! というぐらいに付けまくって、実行するようにしてみた。明日の具合いを見て対策を考えるべきだが、これでダメなら最後の手段を用意している。

それが、ウォッチドッグタイマの実装である(AppleScriptなのに)。

idleハンドラで60秒ごとにタイマ割り込み処理を行い、その時点のタイムスタンプをテンポラリファイルに書き出す。別途、監視用アプリケーションがそのテンポラリファイルを監視し、リアルタイムクロックとの差が3分を超えるようであれば何らかの問題が発生していると判断。すぐさまメインプロセスを終了させる。こういう場合は野蛮にkillallコマンドでも使ってUNIX側のアプローチでプロセスを落としていいだろう。

ああ、こういう構造にすると……「いま現在何を行っているか」を監視側に伝えるためのハンドシェイクをしなくてはならないし、「どこまでダウンロードを行ったか」を保持するためのファイルも用意しなくてはならない。本体側はkillされた後に再度実行されることになるが、どこまで処理を行ったかを外部ファイルから読み直し、指定位置から処理を実行することになるだろう。

…………なんか、余計に面倒になっていそうな(汗) なんとか、curlコマンドの呼び出し方法の改善、ぶっちゃけた話、もしエラーが返ってきたときには結果を/dev/nullに捨てつつ、do shell scriptコマンドの処理結果を待たずに非同期実行するようAppleScript側で処理することで、なんとか乗り切っていただきたいものである。

ウォッチドッグタイマを実装するぐらいなら、高速富士山アプリケーションを引っ張りだしてきて、そちらを強化したほうがよいかもしれない。

Copyright By Piyomaru Software. All Rights Reserved