FTPサーバーにアップロードされたファイルを抽出できません。

FTPサーバーにアップロードされたファイルを抽出できません。

ソースシステム:

  • オペレーティングシステム7
  • バッシュシェル
  • 圧縮

宛先システム:

  • FTPサーバー
  • セントOS 6.4
  • バッシュシェル
  • 解凍する

シェルスクリプトを使用してファイルをアーカイブしてFTPサーバーに送信するスクリプトを作成しました。

#!/bin/bash

# Declare no. of days
days=15

# Declare Source path of sql files and Destination path of backup directory
dumps=/home/applications/backup

bkpdir=/home/applications/backup/olddumps

# Find sql dumps of ets
files=($(find $dumps/*.sql -mtime +"$days"))

for file in ${files[*]}

do
# Move each file into backup dir which is 15 days old
echo "file is: $file\n";

mv $file $bkpdir

# Find the sql files and compress them

cd $bkpdir

filename=$(basename $file)

zip $bkpdir/$filename.zip $filename

# FTP Login

HOST=a.b.c.d

USER=xxxx

PASS=yyyyy

REM_DIR=/olddumps/sqlfiles

echo "Uploading file via FTP:"

ftp -in $HOST <<EOF

quote USER $USER

quote PASS $PASS

cd $REM_DIR

put $filename.zip

bye

EOF

# Remove sql files if any
rm $bkpdir/$filename

done

# Remove compressed files which are 6 months old
find $bkpdir/*.zip -type f -mtime +180 -exec rm {} \;

これで問題は、unzipコマンドを使用してターゲットシステムの圧縮ファイルを抽出できず、次のエラーが表示されることです。

アーカイブ: emt_bus-08-09-16-03-29.sql.zip

caution: zipfile comment truncated
error [emt_bus-08-09-16-03-29.sql.zip]: missing 49666528 bytes in zipfile
(attempting to process anyway)
error [emt_bus-08-09-16-03-29.sql.zip]: start of central directory not found;
zipfile corrupt.
(please check that you have transferred or created the zipfile in the
appropriate BINARY mode and that you have compiled UnZip properly)

以前に保管しておきましたがtar運がありません。ターゲットシステムからファイルを抽出せずに次のエラーを表示します。

gzip: stdin: invalid compressed data--format violated
emt_bus-08-09-16-03-29.sql
tar: Unexpected EOF in archive
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now

この問題をどのように解決しますか?

ベストアンサー1

すでにエラーメッセージが表示されていますが、スクリプトを実行しても表示されないことがあります。

script.sh > log.txt 2>&1 を実行して、
すべての出力をログにキャプチャします。

最後の部分はstderrをstdoutにリダイレクトします(この場合はlog.txt)。

タイムアウト(送信されたファイルの数、接続の信頼性)を検出したり、次のコマンドを待っていると思ったコマンドが実際にスクリプトで待機していない可能性があります。

おすすめ記事