我正在尝试将几 TB 的数据从多个主机移动到其他主机。每个主机将有 8 个不同的 rsync 命令,指定不同的目录结构,我将在 9 个不同的主机上进行复制。
下面是我将在每个主机上运行的示例(目的地不同但结构相同):
sudo -u svc_unix timeout 43200 rsync -azve ssh /tmp01/var/lib/data/engine_* --exclude 'db1' --exclude 'db2' 10.2.2.16:/tmp/prod/RSYNC_TEMP
sudo -u svc_unix timeout 43200 rsync -azve ssh /tmp01/var/lib/data/client --exclude 'db1' --exclude 'db2' 10.2.2.16:/tmp/prod/RSYNC_TEMP
sudo -u svc_unix timeout 43200 rsync -azve ssh /tmp01/var/lib/data/logs --exclude 'db1' --exclude 'db2' 10.2.2.16:/tmp/prod/RSYNC_TEMP
sudo -u svc_unix timeout 43200 rsync -azve ssh /tmp01/var/lib/data/backup* --exclude 'db1' --exclude 'db2' 10.2.2.16:/tmp/prod/RSYNC_TEMP
sudo -u svc_unix timeout 43200 rsync -azve ssh /tmp01/var/lib/data/engine_* --exclude 'db' 10.2.2.16:/tmp/QA/RSYNC_TEMP
sudo -u svc_unix timeout 43200 rsync -azve ssh /tmp01/var/lib/data/client --exclude 'db' 10.2.2.16:/tmp/QA/RSYNC_TEMP
sudo -u svc_unix timeout 43200 rsync -azve ssh /tmp01/var/lib/data/logs --exclude 'db' 10.2.2.16:/tmp/QA/RSYNC_TEMP
sudo -u svc_unix timeout 43200 rsync -azve ssh /tmp01/QA/backup* --exclude 'db' 10.2.2.16:/tmp/QA/RSYNC_TEMP
我们计划每天晚上 5 点到凌晨 5 点(12 小时超时)手动运行该程序,直到它同步到新硬件,并进行最后一次运行以解决我们正式切换时的任何更改。
显然,我不想每晚手动启动 72 个不同的 rsync 作业,并且我想找到一种简单的方法来提前终止它们(如果有必要)。
有谁知道有什么好方法可以管理这项任务吗?
答案1
您是否正在寻找编写此脚本的方法?类似这样的方法可行吗(从sudo -u svc_unix timeout 43200
脚本前面的目标发出 - 还删除第 17 行中 rsync 命令周围的 echo 语法)?
#!/bin/bash
#Configs:
ip=("10.1.1.1" "10.1.1.2" "10.1.1.3" "10.1.1.4" "10.1.1.5" "10.1.1.6" "10.1.1.7" "10.1.1.8")
source_base="/tmp01/var/lib/data"
source_array=(engine client logs backup)
destination_base="/tmp"
destination="RSYNC_TEMP"
## Just match the elements of the array with the IP addresses in ${ip[]}
destination_array=(prod QA foo bar stuff stuff prod dev)
exclude_file="some.file"
echo "script start time: $(date)"
for i in ${!ip[@]}; do
echo " start time for ${ip[$i]}: $(date)"
echo "rsync -azqe ssh ${ip[$i]}:$source_base/${source_array[0]}_* :$source_base/${source_array[1]} :$source_base/${source_array[2]} :$source_base/${source_array[3]} --exclude-from=$exclude_file localhost:$destination_base/${destination_array[$i]}/$destination/"
echo "done with files coming from ${ip[$i]}"
done
echo " script end time: $(date)"