สคริปต์ทุบตีที่กำหนดเวลา: วิธีการถ่ายโอนไฟล์จากเว็บเซิร์ฟเวอร์ HTTPS ไปยังเซิร์ฟเวอร์ FTP


0

ฉันต้องทำให้งานที่ดาวน์โหลดไฟล์ XML บน https: // เว็บเซิร์ฟเวอร์ (พร้อมการตรวจสอบสิทธิ์) โดยอัตโนมัติและอัปโหลดบนเซิร์ฟเวอร์ FTP (พร้อมการรับรองความถูกต้องอื่น)

ดังนั้นฉันคิดว่าวิธีที่ดีที่สุดคือใช้ CURL (หรือ WGET) เพื่อดาวน์โหลดไฟล์และ lftp เพื่ออัปโหลด!

แต่ฉันไม่รู้วิธีเขียนสคริปต์ในไฟล์. sh เพื่อเขียนโปรแกรมมัน cron

คุณมีตัวอย่างหรือไม่

แก้ไข

ตัวอย่างไฟล์ที่จะดาวน์โหลด: https://www.domain.ltd/.../export.aspx?dt=07.08.2017 (รูปแบบ dd.mm.YYYY)

ตัวอย่างชื่อไฟล์ในเซิร์ฟเวอร์ FTP ขณะที่อัพโหลด: export_07.08.2017.xml

คำตอบ:


2

คำถามของคุณประกอบด้วยคำถามสามข้อจริง: 1) วิธีดาวน์โหลดไฟล์ (ด้วย auth) 2) วิธีอัปโหลดไฟล์ (พร้อมรับรองความถูกต้อง) 3) วิธีกำหนดเวลางาน CRON

คำถามแรกของฉันคือคุณต้องการเก็บ id / passwd อย่างไร

โฆษณา 1) คุณสามารถใช้ทั้งสอง curl และ wget ขึ้นอยู่กับสิ่งที่ดีกว่าสำหรับกรณีการใช้งานของคุณ ฉันแนะนำให้อ่านโพสต์ที่ยอดเยี่ยมโดย Daniel Stenberg Curl vs Wget เพื่อทำความเข้าใจความแตกต่าง (สรุปอย่างรวดเร็ว - curl เป็นนักพัฒนาที่เป็นมิตรมากขึ้นและยังเป็นห้องสมุด wget เป็นคำสั่ง)

ฉันแนะนำให้ใช้ใบรับรองโดยไม่มีผู้ใช้ / รหัสผ่านเช่นทุกคนที่มีรหัสหรือกลุ่มของคุณจะปรากฏให้เห็น

ในตัวอย่างของฉันฉันจะใช้ 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:00 น. ให้ทำดังนี้:
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


ขอบคุณฉันจะลอง สำหรับ Cron ไม่เป็นไร สำหรับการดาวน์โหลดฉันมี www ... เข้าถึงด้วยผู้ใช้และรหัสผ่าน บน FTP มันคือการพิสูจน์ตัวตนผู้ใช้และรหัสผ่านด้วย ชื่อไฟล์คือวันที่ของวัน: domain.ltd/.../services/lqjxmlexport/export.aspx?dt=07.08.2017 (รูปแบบ dd.mm.YYYY)
Meloman

1
@Meloman: โปรดทำ :) ฉันแนะนำให้ใช้ใบรับรองเสมอเพราะปลอดภัยกว่าและไม่มีใครสามารถ "ขโมย" ข้อมูลประจำตัวของคุณจากข้อความธรรมดา หากคุณต้องการใช้ curl พร้อมข้อมูลประจำตัว curl -u username:password https://example.com. หากตอบคำถามของคุณโปรดทำเครื่องหมายขอบคุณ
tukan

1
ใช่แน่นอน แต่เราไม่มีทางเลือกที่จะใช้สิ่งที่ผู้ให้บริการของ xml มอบให้กับเราและเป็นการพิสูจน์ตัวตนที่ง่าย! แม้ว่าฉันจะพบว่ามันโง่เพราะ SSL ก็เพียงพอที่จะเก็บข้อมูลไว้เป็นความลับ ข้อมูลที่ไม่ได้เป็นอย่างอื่น
Meloman

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"

ปัญหาหลักคือการหลีกเลี่ยง vars ผู้ใช้และรหัสผ่านด้วยคำพูดเดียว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.