Мне нужно автоматизировать задачу, которая загружает файл XML на веб-сервер https:// (с аутентификацией) и загружает его на FTP-сервер (с другой аутентификацией).

Поэтому я думаю, что лучший подход - использовать CURL (или WGET) для загрузки файла и lftp для загрузки!?

Но я не знаю, как записать его в файл .sh, чтобы запрограммировать его с помощью cron (каждый четверг в 8 утра).

У тебя есть пример?

РЕДАКТИРОВАТЬ

Пример файла для загрузки:https://www.domain.ltd/.../export.aspx?dt=07.08.2017 (дд.мм.Формат ГГГГ)

Пример имени файла на FTP-сервере при загрузке:export_07.08.2017.xml

2 ответа2

2

Ваш вопрос фактически состоит из трех вопросов:1) Как загрузить файл (с аутентификацией) 2) Как загрузить файл (с аутентификацией) 3) Как запланировать работу CRON

Мой первый вопрос: как вы хотите сохранить id/passwd?

Объявление 1) Вы можете использовать как curl и wget зависимости от того, что лучше для вашего варианта использования. Я рекомендую прочитать отличную статью Даниэля Стенберга:curl против Wget, чтобы понять различия (краткий обзор - curl более удобен для разработчиков и также является библиотекой, а wget - это команда).

Я рекомендую использовать сертификаты без пользователя /passwd, поскольку они будут видны всем, у кого есть ваш идентификатор или группа.

В моем примере я буду использовать curl и Certificate:
curl --cert certificate_file.pem https://example.com/example.xml

Объявление 2) Чтобы загрузить файл curl -T example.xml --cert certificate_file.pem ftps://ftp.server.com/remotedir/

объявление 3) 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

Вы только crontab -e для редактирования файла crontab. Другие способы могут привести к повреждению файла.

Если вы хотите запускать файл каждый четверг в 8 утра, сделайте это следующим образом:
0 8 1-31 1-12 4 /path/your_script.sh или вы можете сделать это с помощью *: 0 8 * * 4 /path/your_script.sh .

Если вы хотите узнать больше, сделайте это по адресу: использование Cron и Crontab и примеры

Теперь собери это:

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

Затем вы должны выполнить файл:your_script.sh /path/example_download.xml /path/example_upload.xml

0

С помощью @ djsmiley2k в чате и @tukan здесь ... вот мой рабочий подход:

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

Главная проблема заключалась в том, чтобы избежать использования паролей пользователей и паролей в одинарных кавычках.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .