невозможно извлечь файл, загруженный на FTP-сервер

невозможно извлечь файл, загруженный на FTP-сервер

Исходная система:

  • CentOS7
  • оболочка bash
  • почтовый индекс

Система назначения:

  • FTP-сервер
  • CentOS 6.4
  • оболочка bash
  • распаковать

Я написал скрипт для архивации файла и отправки его на 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

Вероятно, вы обнаружите, что истекло время ожидания (сколько файлов вы отправляете, насколько стабильно ваше соединение) или, может быть, команда, которая, как вы думаете, ждет следующей команды, на самом деле не ждет в скрипте.

решение2

Ваш скрипт должен установить binary(после quoteкоманд). В противном случае он будет использовать текстовый режим для этого скрипта.

Если бы он был интерактивным, ftp-клиент, который я только что протестировал, принял бы бинарный режим. Но не тогда, когда он неинтерактивен.

Вот что я проверил/и исправил:

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

Связанный контент