Auf den FTP-Server hochgeladene Datei kann nicht extrahiert werden

Auf den FTP-Server hochgeladene Datei kann nicht extrahiert werden

Quellsystem:

  • CentOS 7
  • Bash-Shell
  • Reißverschluss

Zielsystem:

  • FTP-Server
  • CentOS 6.4
  • Bash-Shell
  • entpacken

Ich habe ein Skript geschrieben, um die Datei zu archivieren und sie mithilfe eines Shell-Skripts an den FTP-Server zu senden

#!/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 {} \;

Das Problem besteht nun darin, dass die komprimierte Datei im Zielsystem mit unzipdem Befehl nicht extrahiert wird und den folgenden Fehler anzeigt:

Archiv: 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)

Ich habe tararchiviert, aber kein Glück. Es extrahiert die Datei nicht im Zielsystem und zeigt den folgenden Fehler an

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

Wie kann das Problem behoben werden?

Antwort1

Wahrscheinlich werden Ihnen beim Ausführen des Skripts bereits Fehlermeldungen angezeigt, die Sie jedoch nicht sehen.

Erfassen Sie die gesamte Ausgabe in einem Protokoll, indem Sie es mit
script.sh > log.txt 2>&1 ausführen.

Der letzte Teil leitet stderr auf stdout um, in diesem Fall log.txt

Sie werden wahrscheinlich feststellen, dass es eine Zeitüberschreitung gibt (wie viele Dateien senden Sie, wie stabil ist Ihre Verbindung) oder dass ein Befehl im Skript tatsächlich nicht wartet, obwohl Sie meinen, er warte auf den nächsten Befehl.

Antwort2

Ihr Skript sollte binary(nach den quoteBefehlen) festlegen. Andernfalls wird für dieses Skript der Textmodus verwendet.

Wenn es interaktiv wäre, würde der FTP-Client, den ich gerade getestet habe, in den Binärmodus wechseln. Aber nicht, wenn er nicht interaktiv ist.

Folgendes habe ich getestet und behoben:

#!/bin/sh
ftp -in invisible-island.net <<EOF
quote USER anonymous
quote PASS anonymous
binary
cd cproto
get cproto.tar.gz
bye
EOF

verwandte Informationen