incapaz de extrair o arquivo que é enviado para o servidor FTP

1

Sistema de origem:

  • CentOS 7
  • bash shell
  • zip

Sistema de destino:

  • servidor de FTP
  • CentOS 6.4
  • bash shell
  • descompacte

Eu escrevi um script para arquivar o arquivo e enviá-lo para o servidor FTP usando o script de shell

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

Agora, o problema é que o arquivo compactado no sistema de destino não está sendo extraído usando o comando unzip e mostra o seguinte erro:

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

Eu usei tar para arquivar, mas sem sorte. Não extrai o arquivo no sistema de destino e mostra o seguinte erro

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

Como corrigir o problema?

    
por hruday 24.09.2016 / 13:25

2 respostas

0

Provavelmente você já tem mensagens de erro que não está vendo quando executa o script.

Capture todas as saídas para um log, executando-as com um log script.sh > log.txt 2 > & 1

A última parte redireciona stderr para stdout, neste caso log.txt

Provavelmente, o que você descobrirá é que está expirando (quantos arquivos você está enviando, quão estável é a sua conexão), ou talvez um comando que você espera pelo próximo comando não espere roteiro.

    
por 24.09.2016 / 15:26
0

Seu script deve definir binary (após os comandos quote ). Caso contrário, usará o modo de texto para este script.

Se fosse interativo, o cliente ftp que acabei de testar assumirá o modo binário. Mas não quando não é interativo.

Isso é o que testei / e corrigi:

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

Tags