计划的 bash 脚本:如何将文件从 HTTPS Web 服务器传输到 FTP 服务器

计划的 bash 脚本:如何将文件从 HTTPS Web 服务器传输到 FTP 服务器

我需要自动执行一项任务,即在 https:// Web 服务器上下载 XML 文件(带有身份验证)并将其上传到 FTP 服务器(带有另一个身份验证)。

所以我认为最好的方法是使用 CURL(或 WGET)下载文件并使用 lftp 上传!?

但是我不知道如何在 .sh 文件中编写脚本来使用 cron(每周四早上 8 点)对其进行编程。

你有例子吗?

编辑

下载文件示例: https://www.domain.ltd/.../export.aspx?dt=07.08.2017(dd.mm.YYYY 格式)

上传时 FTP 服务器中的文件名示例: export_07.08.2017.xml

答案1

您的问题实际上由三个问题组成:1)如何下载文件(使用身份验证)2)如何上传文件(使用身份验证)3)如何安排 CRON 作业

我的第一个问题是你想如何存储 id/passwd

广告 1) 您可以同时使用这两种方法curlwget具体取决于哪种方法更适合您的用例。我建议您阅读 Daniel Stenberg 的精彩文章curl 与 Wget了解差异(快速总结 -curl对开发人员更友好,也是一个库,一个wget命令)。

我建议使用没有用户/密码的证书,因为这样每个拥有您的 ID 或组的人都可以看到它。

在我的示例中,我将使用curl证书:
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

答案2

在聊天中@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"

主要问题是使用单引号来转义用户和密码变量。

相关内容