script bash agendado: como transferir um arquivo do servidor web HTTPS para o servidor FTP

0

Eu preciso automatizar uma tarefa que baixa um arquivo XML em um servidor da Web https: // (com autenticação) e carregue-o em um servidor FTP (com outra autenticação).

Então eu acho que a melhor abordagem é usar CURL (ou WGET) para baixar o arquivo e lftp para fazer o upload!?

Mas eu não sei como fazer o script no arquivo .sh para programá-lo sith cron (toda quinta-feira às 8 da manhã).

Você tem um exemplo?

EDITAR

Exemplo de arquivo para download: https://www.domain.ltd/.../export.aspx?dt=07.08.2017 (formato dd.mm.YYYY)

Exemplo de nome de arquivo no servidor FTP durante o upload: export_07.08.2017.xml

    
por Meloman 07.09.2017 / 09:30

2 respostas

2

Sua pergunta compõe, na verdade, três questões: 1) Como baixar um arquivo (com auth) 2) Como fazer upload de um arquivo (com auth) 3) Como agendar um trabalho CRON

Minha primeira pergunta é como você deseja armazenar o id / passwd

ad 1) Você pode usar curl e wget dependendo do que for melhor para o seu caso de uso. Eu recomendo ler um post excelente de Daniel Stenberg enrolar vs Wget para entender as diferenças (um resumo rápido - curl é mais amigável ao desenvolvedor e também é uma biblioteca que um wget é um comando).

Estou recomendando o uso de certificados sem o usuário / senha, como tal, seria visível para todos que tivessem o seu ID ou grupo.

No meu exemplo, usarei curl e certificado:% curl --cert certificate_file.pem https://example.com/example.xml

ad 2) Para carregar um arquivo curl -T example.xml --cert certificate_file.pem ftps://ftp.server.com/remotedir/

ad 3) Formato Cron:

# Minute   Hour   Day of Month       Month          Day of Week        Command    
# (0-59)  (0-23)     (1-31)    (1-12 or Jan-Dec)  (0-6 or Sun-Sat)                
    0        2          12             *                *            /usr/bin/find

Você só usa crontab -e para editar seu arquivo crontab. Outras maneiras podem levar à corrupção de arquivos.

Se você deseja executar o arquivo toda quinta-feira às 8h da manhã, faça do seguinte modo:
0 8 1-31 1-12 4 /path/your_script.sh ou você pode fazê-lo com * : 0 8 * * 4 /path/your_script.sh .

Se você quiser ler mais, faça-o em: Uso e exemplos de Cron e Crontab

Agora, junte tudo:

#!/bin/bash

# $1 is your command line input (e.g. example.xml)
file_download=$1
file_upload=$2

actual_download="curl --cert certificate_file.pem https://example.com/$file_download"

eval $actual_download

if [ -e "$file_upload" ] then
  actual_upload="curl -T $file_upload --cert certificate_file.pem ftps://ftp.server.com/remotedir"
  eval $actual_upload
else
  echo "The $file_upload does not exist!"
fi

Você então executaria o arquivo: your_script.sh /path/example_download.xml /path/example_upload.xml

    
por 07.09.2017 / 10:06
0

Com a ajuda de @ djsmiley2k no chat e @tukan aqui ... aqui está a minha abordagem de trabalho:

#!/bin/bash

#source 
host_from="https://some_web_server/.../export"
file_download=export.aspx?dt='date +%d.%m.%Y'
user_from="www_user"
pass_from="www_password"

#download file form web server
xml_file="curl -u '$user_from:$pass_from' $host_from/$file_download"

# destination
host_to="some_ftp_server/httpdocs/subfolder/.../Export"
file_upload='date +%d.%m.%Y'.xml
user_to="ftp_user"
pass_to="ftp_password"

#upload file to FTP server
xml_upload="curl -T $file_upload -u '$user_to:$pass_to' $host_to/$file_upload"

O principal problema era escapar do usuário e senha vars com aspas simples.

    
por 07.09.2017 / 09:41