我有一个备份脚本,它可以完成这项工作,但需要很长时间才能完成,因为它将用户目录逐一与 DEV_Servers.txt 中的服务器列表进行对比。
有没有办法让 tar 命令同时针对所有服务器列表运行,而不是逐个浏览列表?
#!/bin/ksh
print "==========================================="
print "Taking backup of Users dir"
print "==========================================="
serverList="DEV_Servers.txt"
while read -r server;
do
print
print "==========================================="
print "Taking Backup of Users:" $server
ssh -o StrictHostKeyChecking=no -n $server "cd /opt/test/ ; tar -zcvf 'Users$(date '+%Y%m%d').tar.gz' Users"
done < "$serverList"
并行运行 tar 命令的一种方法是将每个 SSH 调用放在后台。您可以通过在每个 SSH 命令末尾附加一个 & 来实现这一点。以下是修改脚本的方法:
&
的ssh
告诉 shell 在后台运行该命令。wait
命令确保脚本在退出之前等待所有后台作业完成。未经测试:
它要求
ssh server
不要求输入密码。如果你已经设置了,ssh-agent
那就没问题了。这是一个 Bash 脚本,它从文件中读取目录列表并为每个目录创建备份。该脚本将每个目录压缩为一个
.tar.gz
文件,并将备份存储在指定的备份目录中。脚本:
backup_dirs.sh