FTP経由でファイルが正しく転送されていることを確認してください。

FTP経由でファイルが正しく転送されていることを確認してください。

スクリプトはFTP経由でファイルを送信して削除します。ただし、転送が完了する前にファイルが削除され、空のファイルが受信されることがあります。

#!/bin/bash

tar czf <sourcefile> --directory=<directory> log
ftp -v -n $1 <<END_OF_SESSION
user <user> <password>
put <sourcefile> <targetfile>
bye
END_OF_SESSION

rm <sourcefile>

転送が完了した後に削除されるようにプロセスを同期する良い方法は何ですか?

以下のアップデートでわかるように、時々接続されないことがあります。

メモ:

Lubuntu 16.04で実行中です。

進行中に更新してくださいtar

失敗したセッションのログ情報:

Connected to IP
220 (vsFTPd 3.0.2)
331 Please specify the password.
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
200 Switching to Binary mode.
local: /home/user01/tmp/log.tgz remote: E1/180418090056
200 PORT command successful. Consider using PASV.
425 Failed to establish connection.
221 Goodbye.

そして成功したもの:

Connected to IP
220 (vsFTPd 3.0.2)
331 Please specify the password.
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
200 Switching to Binary mode.
local: /home/user01/tmp/log.tgz remote: E1/180418090344
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
6901 bytes sent in 0.00 secs (43.5848 MB/s)
221 Goodbye.

ベストアンサー1

このftpコマンドには、転送が成功したことを確認する機能はありません。このFTPトランスポートの実装を引き続き使用する必要がある場合は、次の2つのオプションがあります。

  1. 転送されたファイルをローカル一時ファイルとしてダウンロードし、ソースファイルとバイト単位で比較します。
  2. FTPクライアントで実行し、lsファイルの長さが予期したものと同じであることを確認してください。これはlsサーバーによって異なり、サーバーの実装によって異なる可能性があることに注意してください。

rsyncFTP を置き換えるか完全に置き換えることに加えて、最良の解決策は、scp安定した転送状態を提供する別の FTP クライアントを使用することです。

#!/bin/bash
tar czf <sourcefile> --directory=<directory> log
lftp -u '<user>,<password>' -e 'put -E <source> -o <target>; quit' "$1"

このlftpコマンドは、ほとんどのLinuxディストリビューションで使用できます。この-Eフラグはputコマンドを次のように設定しますmv。つまり、cp正常な転送後にソースファイルを削除します。

おすすめ記事