- PR -

cpでファイルが欠落する

1
投稿者投稿内容
Tanaka
会議室デビュー日: 2003/01/26
投稿数: 7
お住まい・勤務地: 神奈川・新宿
投稿日時: 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
未記入
ぬし
会議室デビュー日: 2002/03/28
投稿数: 255
投稿日時: 2003-02-14 14:13
断言できませんが,
>ftp受信処理は、perlで作成したスクリプトで処理していますが、
>問題なくファイルの受信はできています。
Perlスクリプト内部で,ftp部分をforkしたり別スレッドで
動かしたりしてませんか?

もしそうなら,ftpが完了する前にcpが動いているだけなのでは.

>毎回必ず欠落するというわけでもなく、成功する場合もあります。
こういうあたりは,いかにも並列処理っぽい「臭い」がします.
ゼロ
常連さん
会議室デビュー日: 2002/07/26
投稿数: 33
投稿日時: 2003-02-14 14:15
perl_ftpスクリプトを例えばncftpgetなどに変更してみてはいかがでしょうか?

どのようなスクリプトなのかは分かりませんが、ncftpgetであれば返り値を利用して
ダウンロードに失敗した際の条件分岐なども可能です
ふじい
大ベテラン
会議室デビュー日: 2002/05/07
投稿数: 123
お住まい・勤務地: 東京
投稿日時: 2003-02-14 15:42
ふじいです。

引用:

Tanakaさんの書き込み (2003-02-14 13:33) より:

ftp受信処理は、perlで作成したスクリプトで処理していますが、
問題なくファイルの受信はできています。



ほかの人が書いてるように、受信が完了してないのにコピーしてる可能性大。

systemでやってるんでしたら、戻り値をチェックしてから
コピーするように変更しましょう。

systemはforkするので、その手のミスに陥りがちなので。
Tanaka
会議室デビュー日: 2003/01/26
投稿数: 7
お住まい・勤務地: 神奈川・新宿
投稿日時: 2003-02-15 12:58
Tanakaです。

みなさん、返答ありがとうございます。

ふじいさん、悪夢を統べるものさんのご助言通り、
ftpのデータコネクション部分をforkしてます。
そして、親プロセスでwaitしてませんでした。

お騒がせしてすいませんでした。

_________________
--
Tanaka
1

スキルアップ/キャリアアップ(JOB@IT)