• 締切済み

FTP送信エラーの検知について

Bシェルプログラムで、あるファイルをFTP送信する処理を作っています。そのなかで、もし、FTPでファイル転送を失敗した場合、転送エラーをログファイルなどに残し、ファイルを再送する処理を組みたいのです。 FTPはエラーが判断できない(エラーのReturnがない)と聞きました。なにか、よい方法はないでしょうか?

みんなの回答

  • you-m
  • ベストアンサー率58% (190/327)
回答No.3

BシェルでFTPする方法で、多分一番手ごろな方法は、ヒアドキュメントを使った方法だと思いますが、使える環境によっては、他にも選択肢はあります。 とりあえず、今前提にしているのが、ヒアドキュメントを使った方法だと仮定して、回答します。 コマンドを実行したときの返り値は、通常そのコマンドそのものの実行の返り値です。 FTPの場合、コマンドの実行と、通信の結果はまったく別物ですので、通信の結果は返り値には反映されません。 で、具体的にどうすればいいかというと、送信対象のファイルの数が一定であれば、FTP実行時の出力を、一時的なログファイルにリダイレクトします。 FTPコマンド成功時の出力 「Transfer complete.」 の数を、FTP処理が終わった後でカウントすれば、それが想定よりも少ない場合は、失敗と判断できます。 ご参考までに。

momo63
質問者

お礼

回答、ありがとうございました。 一番下で、自分のわかる範囲で補足させていただきました。(簡単なところしかわからなくて、申し訳ないです) 何か、他に調べて記述する事がありましたら、教えてください。よろしくお願いいたします。

  • xjd
  • ベストアンサー率63% (1021/1612)
回答No.2

あなたの環境がさっぱりわからないのですが、 私の場合は rsync でファイル転送します。 シェルスクリプト内でエラーコード($?)が返ってくるので都合がよいです。 ご参考まで。

momo63
質問者

お礼

回答、ありがとうございました。 一番下で、自分のわかる範囲で補足させていただきました。(簡単なところしかわからなくて、申し訳ないです) 何か、他に調べて記述する事がありましたら、教えてください。よろしくお願いいたします。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

送信処理後、そのファイルをgetしてみて、送ったものと等しいかを確認するとか。 今使っている環境だと、net/ftp.rbやNet/FTP.pmといったftpセッションをプログラミングできるモジュールが標準で入っているので、自分ならrubyなりperlなりで書いてしまいます。 ――という場合もあるので、どういう環境で何が使えるかを明記しておかないと、的確な回答は寄せてもらえないかと。

momo63
質問者

お礼

回答、ありがとうございました。 自分のわかる範囲で補足させていただきました。(簡単なところしかわからなくて、申し訳ないです) 何か、他に調べて記述する事がありましたら、教えてください。よろしくお願いいたします。

momo63
質問者

補足

説明不足ですみません。 HP-UXからPC(WINDOWS2000)へ、ファイルを送信します。 ファイルの数と名前は決まっていません。(ファイル名は先頭は固定文字で、後ろに日時がつきます) >ftpセッションをプログラミングできるモジュールが標準で入っている 現在、対象としている環境に、上記のモジュールが標準で入っているかどうかは、どこで調べればよろしいのでしょうか? また、環境説明については、他に調べて明記すべきことはありますでしょうか? すみませんが、全く詳しくないので、教えてください。 よろしくお願いいたします。

関連するQ&A