zaplanowany skrypt bashowy: jak przenieść plik z serwera WWW HTTPS na serwer FTP

0

Muszę zautomatyzować zadanie, które pobiera plik XML na serwerze WWW https: // (z uwierzytelnieniem) i przesłać go na serwer FTP (z innym uwierzytelnieniem).

Myślę, że najlepszym rozwiązaniem jest użycie CURL (lub WGET) do pobrania pliku i lftp do przesłania!?

Ale nie wiem, jak napisać skrypt w pliku .sh, aby go zaprogramować sith cron (w każdy czwartek o 8 rano).

Czy masz przykład?

EDYTOWAĆ

Przykład pliku do pobrania: https://www.domain.ltd/.../export.aspx?dt=07.08.2017 (format dd.mm.YYYY)

Przykład nazwy pliku na serwerze FTP podczas przesyłania: export_07.08.2017.xml

Meloman
źródło

Odpowiedzi:

2

Twoje pytanie składa się z trzech pytań: 1) Jak pobrać plik (z auth) 2) Jak przesłać plik (z auth) 3) Jak zaplanować pracę CRON

Moje pierwsze pytanie brzmi: jak chcesz przechowywać id / passwd

ad 1) Możesz użyć obu curl i wget w zależności od tego, co jest lepsze dla twojego przypadku użycia. Polecam czytanie doskonałego postu Daniela Stenberga curl vs Wget zrozumieć różnice (szybkie podsumowanie - curl jest bardziej przyjazny dla programistów i jest również biblioteką wget to polecenie).

Zalecam używanie certyfikatów bez user / passwd, ponieważ byłyby one widoczne dla wszystkich posiadaczy Twojego identyfikatora lub grupy.

W moim przykładzie użyję curl i certyfikat:
curl --cert certificate_file.pem https://example.com/example.xml

ad 2) Aby przesłać plik curl -T example.xml --cert certificate_file.pem ftps://ftp.server.com/remotedir/

ad 3) Format 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

Tylko ty crontab -e edytować plik crontab. Inne sposoby mogą prowadzić do uszkodzenia pliku.

Jeśli chcesz uruchamiać swój plik w każdy czwartek o 8 rano, wykonaj następujące czynności:
0 8 1-31 1-12 4 /path/your_script.sh lub możesz to zrobić *: 0 8 * * 4 /path/your_script.sh .

Jeśli chcesz przeczytać więcej, zrób to na: Wykorzystanie i przykłady Cron i Crontab

Teraz połącz to:

#!/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

Następnie wykonasz plik: your_script.sh /path/example_download.xml /path/example_upload.xml

tukan
źródło
Dzięki, spróbuję. Dla Crona wszystko w porządku. do pobrania mam www ... dostęp za pomocą użytkownika i hasła. Na FTP również uwierzytelnianie użytkownika i hasła. Nazwa pliku to data dnia: domain.ltd/.../services/lqjxmlexport/export.aspx?dt=07.08.2017 (format dd.mm.YYYY)
Meloman
1
@Meloman: Proszę zrobić :). Zawsze zalecam używanie certyfikatów, ponieważ jest to bardziej bezpieczne i nikt nie może „ukraść” poświadczeń z tekstu jawnego. Jeśli chcesz użyć zwijania z poświadczeniami curl -u username:password https://example.com. Jeśli odpowie na twoje pytanie, zaznacz je, dziękuję.
tukan
1
Tak, oczywiście, ale nie mamy wyboru, aby użyć tego, co daje nam dostawca xml, i to jest proste uwierzytelnienie! Nawet jeśli uważam to za głupie, ponieważ SSL jest wystarczający do zachowania poufności danych. Dane, które nie są inne.
Meloman
0

Z pomocą @ djsmiley2k na czacie i @tukan tutaj ... oto moje podejście do pracy:

#!/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"

Głównym problemem było uniknięcie zmiennych użytkownika i hasła za pomocą pojedynczych cudzysłowów.

Meloman
źródło