マンガでよめる痔のこと・薬のこと

ある目的のためFTPサーバーが受け取ったファイルを受け取った直後に必要な処理をするため、処理をするプログラムを受け取ったファイルを引数にして起動したいのですが、具体的にどうすればいいのでしょうか?

現在その方法がわからないので、crontab を使ってFTPで受け取るディレクトリを監視し新しいファイルが出来てたら処理を開始しているのですが、FTPの受信かた直ちに処理を開始出来た方がいろいろ都合がよいのです。

なにか方法がありそうな気もするのですが、分かりませんでした。ご存知の方がおられましたらお教えください。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

そもそも


・正しくファイルが転送されて、かつ、正しくディスクにファイルが書き込まれた
っていう確証を得るのがFTPでは難しいと思うので私は、#1さんのおっしゃりように賛成です。

そんな訳で以下は上記を無視して都合のいいように転送と書き込みもろもろがうまく処理されている前提でのものです。ま、ただのアイデアですね。

1. ファイル監視のタイミングを短くする
  cronから呼び出す(例えば)シェルスクリプトでループ処理とsleepを使えばすぐ出来ます。スクリプト自体も2重起動しないようにしておけばよりベターですね。「ファイルの監視処理が重い」とありますが(サーバスペックが分からないのでなんともいえませんが)やり方によってはそんなに重くないと思うんですけどねぇ。どうやって監視しているかによりますけど。

2. ファイルの存在ではなくてxferlog(当然転送処理を出力させる)を監視する
  ログ監視プログラムは結構あります。Logsurferだったりswatchあたりが有名です。ログに特定のキーワードが出力されればコマンドを実行出来ます。しかし、常駐するものが増える点では同じですのでsyslogデーモンをsyslog-ng辺りに変えてしまうのもいいかもしれません。これはログの文言をトリガーにコマンドを実行出来ます。最近のディストリビューションでは含まれているものもありますね。あとswatchとかはログローテ時にはまる場合もあるんで注意が必要です。

3. まず許されてないんじゃないかと予想しますが相手にsshで入ってもらって処理をキック
  不定期とはいえpushする側は転送処理の終了タイミングは分かるんですからお奨めなんですが。。。

プログラムを自作~とありますが、wrapperを作るぐらいならwu-ftpdのソースに手を入れて転送終了時に外部コマンドを実行するようにした方が断然楽だと思いますよ。
    • good
    • 0
この回答へのお礼

お答えありがとうございました。swatch を入れてみることにしました。

お礼日時:2006/06/08 18:48

シェルでncftpgetなどコマンドラインftpで


受け取れば、時系列的な処理なので受け取った
あとに次の処理にうつりますね

サーバー側が常にファイルを監視する仕組みは
サーバーの負担も大きいでしょうし、あまり
実用的ではない気がします。

この回答への補足

ncftpge ってどんなものでしょうか?

現在の受信は xinetd を通して wu-ftpd で受信しています。送信側からは不定期に送られてきます。できるだけ早く結果を反映させたいので、1分ごとに crontab でファイルを監視しています。おっしゃるとおり、この処理は重いです。もし、wu-ftpd と同等、あるいはこれをラップしたようなシェルスクリプトがあれば、ちょっと手を加えればできそうな気がするのですが。
最後の手段としては inetd の仕組みを自分で勉強して、ftpd との橋渡しをするプログラムを自作するという手もあるかとも思いますが、もしすでに誰かが作られているのなら無駄になるので質問した次第です。

補足日時:2006/06/08 14:06
    • good
    • 0
この回答へのお礼

すいません、お礼ではなく補足の続きです。

いろいろ考えてみているのですが、ファイルを監視するより xferlog を監視する方が簡単そうですね。デーモンでこれをやるとして、最後に追加されたところを監視するにはどうしたらいいんでしょう? tail -f みたいに。

お礼日時:2006/06/08 18:01

このような(ファイル受信後プログラムを起動するという)高度なファイル転送の仕組みには、ソリューションベンダー系のファイル転送プロダクトが必要になります。


例えばLinkExpress(富士通)やHULFTなどです。企業向けなので結構高いですね。

フリーで実現できるものは、ちょっと心当たりがないです。
    • good
    • 1

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QFTPで書き込み中のファイルの完了を知りたい

FTPで書き込み中のファイルがあるとします。そのファイルが、書き込み中なのか、それとも、書き込みが完了したのかを、知りたいのですが、良い方法はありますでしょうか。書き込みファイル名はあらかじめ、わかっています。(書き込み中に読んだ場合、最後まで読み切ることが出来ないために書き込み完了迄待ちます)当方で、調査した限りでは、ファイル名を指定して、そのファイルが、他プロセスによってオープンされているか否かを知るシステムコールは存在しませんでした。OSは、sun solaris10を使用の予定ですが、UNIX系(linux含む)で実現可能であれば、かまいません。

Aベストアンサー

一般のUnix系のOSで、fopen() でチェックできるかどうかは疑問です^^

たしかに、Unix系のOSで、ファイルをオープンしているプロセスがあるかどうかを調べられるような標準的なシステムコールがあるという話は、あまり聞かないですよね。

http://www.mlb.co.jp/linux/mld-ml/200206/msg00028.html ←存在しないのがほんとに真実かどうかは知りませんが^^

ftp の際、get してくるファイルのサイズ情報をどこかに出力しておいて、そのサイズに達したか否かで、「書き込み中か、書き込み完了か」を判定するのがもっともポータブルな方法かと^^

※ 最初に lseek などして、見掛けのサイズを大きくしておいてから rewind して実際に書き込みを始めるみたいなことしてる ftp の実装なんてあるとまずいですけど^^;


人気Q&Aランキング