Use a Curl na funcionalidade de upload:
curl --upload-file "$FILE" --user "$USER:$PASSWD" "ftp://$HOST/backup/"
Eu tenho um script que é executado por cron
para criar backup de um banco de dados MySQL e alguns arquivos. Depois de criar uma tarball e criptografá-la com openSSH
, tenho que colocá-la em um servidor ftp remoto. A seguir está o código para a parte ftp:
HOST='abcd.dyndns.biz'
USER='username'
PASSWD='password'
FILE='myBack-'${LOCAL_HOST}'-'${DATENAME}'.enc.tar.gz'
DIRNAME='/usr/local/backups/'
cd ${DIRNAME}
ftp -n ${HOST} <<END_SCRIPT
quote USER ${USER}
quote PASS ${PASSWD}
cd backup
lcd ${DIRNAME}
put ${FILE}
quit
END_SCRIPT
Se eu executar diretamente o script a partir da linha de comando > sudo ./mybackup.sh
, ele rodará sem problemas e colocará o arquivo de backup no ftp, mas quando estiver rodando a partir de cron
ele nunca colocou o arquivo no ftp -ftp (como consolidação de arquivo de log e resultado de e-mail) as etapas funcionam bem. Eu não consigo obter nada de nenhum arquivo de log ou identificar a causa.
NOTA: - O nosso dyndns.biz ip não muda como nós pagamos o plano.
Use a Curl na funcionalidade de upload:
curl --upload-file "$FILE" --user "$USER:$PASSWD" "ftp://$HOST/backup/"
Umm .. Eu vejo vários pontos porque poderia falhar.
você não está separando seus comandos ftp: // com ponto - e - vírgulas ou novas linhas - tente adicionar \ n ou; mais uma vez idk o que ur app quer
você não está verificando se o arquivo realmente existe antes de tentar colocá-lo.
Eu tive um problema parecido. A solução para mim: referir-se diretamente aos diretórios sem variáveis como esta:
lcd /mpla/mpla2/dir1
cd /mpla3/mpla4/dir2
e funcionou. Apenas esta mudança. O quote USER $username
e quote PASSWD $password
foram deixados como estão, mas sem as chaves.
Tags backup cron ftp ubuntu bash-scripting