- - PR -
cpでファイルが欠落する
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-02-14 13:33
Redhat Linux 7.1を使用しています。
ftpでファイルを受信して、受信したファイルを cpコマンドで違うディレクトリにコピーする、 というシェルスクリプトを作成して実行してみました。 ----- ソースの例 ----------------------------------- #!/bin/bash host=hoge backup_dir=backup for local_file in f1.txt f2.txt f3.txt f4.txt; do # perlで作成したftpプログラムでファイル受信 echo -n "recv file... " perl_ftp $host $local_file echo "done" # バックアップのため、受信ファイルをコピー echo -n "recv file backup... " /bin/cp $local_file "$backup_dir/$local_file" echo "done" done exit ---------------------------------------------------- ftp受信処理は、perlで作成したスクリプトで処理していますが、 問題なくファイルの受信はできています。 ですが、cpでコピーしたファイルと受信ファイルを比較すると ファイルサイズが違っており、cpコマンドでバックアップした ファイルの後半部分が欠落してしまいます。 毎回必ず欠落するというわけでもなく、成功する場合もあります。 このような状況に陥る原因とはなんでしょうか? ご存知の方がいましたら教えてください。 よろしくお願いします。 _________________ -- Tanaka | ||||
|
投稿日時: 2003-02-14 14:13
断言できませんが,
>ftp受信処理は、perlで作成したスクリプトで処理していますが、 >問題なくファイルの受信はできています。 Perlスクリプト内部で,ftp部分をforkしたり別スレッドで 動かしたりしてませんか? もしそうなら,ftpが完了する前にcpが動いているだけなのでは. >毎回必ず欠落するというわけでもなく、成功する場合もあります。 こういうあたりは,いかにも並列処理っぽい「臭い」がします. | ||||
|
投稿日時: 2003-02-14 14:15
perl_ftpスクリプトを例えばncftpgetなどに変更してみてはいかがでしょうか?
どのようなスクリプトなのかは分かりませんが、ncftpgetであれば返り値を利用して ダウンロードに失敗した際の条件分岐なども可能です | ||||
|
投稿日時: 2003-02-14 15:42
ふじいです。
ほかの人が書いてるように、受信が完了してないのにコピーしてる可能性大。 systemでやってるんでしたら、戻り値をチェックしてから コピーするように変更しましょう。 systemはforkするので、その手のミスに陥りがちなので。 | ||||
|
投稿日時: 2003-02-15 12:58
Tanakaです。
みなさん、返答ありがとうございます。 ふじいさん、悪夢を統べるものさんのご助言通り、 ftpのデータコネクション部分をforkしてます。 そして、親プロセスでwaitしてませんでした。 お騒がせしてすいませんでした。 _________________ -- Tanaka |
1