2015/01/21ホットフォルダ機能ってどうやるのかホットフォルダは、あらかじめ決められたフォルダにファイルをコピーやファイル転送し、それを検出してそのファイルに対して処理をする仕組みのことで、オープンシステム(言い方が古いかな)になってからシステム間通信でよくつかわれている機構のことです。この機構の「まともなやり方」をLinuxで考えてみました。単純な実装をして失敗してるのを何度かみたことがあるいます。下記のような単純なスクリプトです。ディレクトリの中に”*.xml”にヒットするファイルがあるか見て、なければ10秒待つ、あれば処理(下記ではファイル名を表示して削除するようにしている単純なサンプル)します。遅延を嫌ってsleepをいれないようなタコな実装をしてるのをたまに見かけます、CPUをめちゃ食って暴走しますので、1秒でも100msでもいいので待つようにします。${HITFILE}#fidone実はこの処理は問題があります。検出しないファイル検出を10秒間隔でやってますので検出されるのは0~10秒かかります。間隔を狭めて1秒にすれば1秒間隔になりますが。タイミングが悪いと1分間に60ぐらいしか処理できないかもしれません。ファイルが切れて読まれてしまうファイルの存在チェックをしているだけなので、ftpなどのファイル転送の場合、ファイルが書き込み中である可能性があり、ファイルが大きいなどタイミングによっては途中までしかないファイルで処理してしまうかもしれません。ある対策はリネームファイルが途中で切れないようにするためには、ファイルを書き出して終わったらリネームするするほいう方法があります。相手がプログラムであればこういった工夫はできますが、手作業でファイルをいれる場合などは人間任せになってしまいます。念のためのリトライ処理もしファイルが途中でちゃんと読めないことが検出できたら。タイマーでまってリトライしてという方法がありますが、本当に壊れたファイルだと永遠に処理が進みません。