質問: ftp受信直後に受け取ったファイルを処理するプログラムを起動するには? ある目的のためftpサーバーが受け取ったファイルを受け取った直後に必要な処理をするため、処理をするプログラムを受け取ったファイルを引数にして起動したいのですが、具体的にどうすればいいのでしょうか? 現在その方法がわからないので、crontab を使ってftpで受け取るディレクトリを監視し新しいファイルが出来てたら処理を開始しているのですが、ftpの受信かた直ちに処理を開始出来た方がいろいろ都合がよいのです。 なにか方法がありそうな気もするのですが、分かりませんでした。ご存知の方がおられましたらお教えください。
回答: そもそも ・正しくファイルが転送されて、かつ、正しくディスクにファイルが書き込まれた っていう確証を得るのがftpでは難しいと思うので私は、#1さんのおっしゃりように賛成です。 そんな訳で以下は上記を無視して都合のいいように転送と書き込みもろもろがうまく処理されている前提でのものです。ま、ただのアイデアですね。 1. ファイル監視のタイミングを短くする cronから呼び出す(例えば)シェルスクリプトでループ処理とsleepを使えばすぐ出来ます。スクリプト自体も2重起動しないようにしておけばよりベターですね。「ファイルの監視処理が重い」とありますが(サーバスペックが分からないのでなんともいえませんが)やり方によってはそんなに重くないと思うんですけどねぇ。どうやって監視しているかによりますけど。 2. ファイルの存在ではなくてxferlog(当然転送処理を出力させる)を監視する ログ監視プログラムは結構あります。logsurferだったりswatchあたりが有名です。ログに特定のキーワードが出力されればコマンドを実行出来ます。しかし、常駐するものが増える点では同じですのでsyslogデーモンをsyslog-ng辺りに変えてしまうのもいいかもしれません。これはログの文言をトリガーにコマンドを実行出来ます。最近のディストリビューションでは含まれているものもありますね。あとswatchとかはログローテ時にはまる場合もあるんで注意が必要です。 3. まず許されてないんじゃないかと予想しますが相手にsshで入ってもらって処理をキック 不定期とはいえpushする側は転送処理の終了タイミングは分かるんですからお奨めなんですが。。。 プログラムを自作~とありますが、wrapperを作るぐらいならwu-ftpdのソースに手を入れて転送終了時に外部コマンドを実行するようにした方が断然楽だと思いますよ。