in How To

rsync ห้ามหยุด ห้ามหายและนายต้องไปต่อ

บล็อกต้อนรับต้นเดือนและวันแรงงาน ด้วยจำเป็นต้องย้ายไฟล์จำนวนน้อยนิดมหาศาล แบบเร่งด่วน จำนวนหนึ่งไปไว้อีกทีและงานนี้ก็ห้ามหยุดจนกว่างานจะเสร็จ (นี่มันสะท้อนชีวิตใครบ้างไหม ^__^) ใครมีงานแบบนี้ต้องทำแบบด่วน ๆ และไม่มีเวลาให้ต้องมามอนิเตอร์และรันใหม่อีกรอบ ก็ใช้สคริปท์นี้ไปปรับได้

อธิบายคร่าว ๆ คือ

  • ใช้ rsync ในการโอนย้ายไฟล์ไปอ่านรายละเอียดต่อได้ที่นี่
  • อาจมีบางช่วงหรือ error ขัดจังหวะช่วงโปรแกรม rsync ทำงานแล้วโปรแกรมปิดตัวลงก็ให้โปรแกรม rsync กลับมาทำงานต่อ (Loop) จนกว่าจะสำเร็จ (ดูบังคับมากมาย)
  • เสร็จแล้วก็ Line notify นิดนึง
#!/usr/bin/env bash

# Declare an array of Token
declare -a ACCESS_TOKENS=("token1" "token2")
START=$(date +"%d-%m-%Y %H:%M")
RC=1

while [[ $RC -ne 0 ]]
do
    NOW=$(date +"%d-%m-%Y %H:%M")

    rsync -arv --partial --progress --ignore-errors [source] [destination]
    RC=$?
    
    if [[ $RC -ne 0 ]] ; then
        echo "$NOW Rsync failure. Backing off and retrying..."
        sleep 180
    fi
done

# Iterate the token array
for token in "${ACCESS_TOKENS[@]}"; do
    echo $token
    curl -X POST https://notify-api.line.me/api/notify -H "Authorization: Bearer $token" -F "Rsync start $START completed normally" > /dev/null 2>&1   
done

echo "Rsync start $START completed normally"

จบปิ๊งงง (ไม่ได้ดื้อก็แค่พยายาม)
ป.ล.
เผื่อเคสต้องรีสตาร์ทก็เอาไปไว้ใน cron job ด้วยนะ ^__^