我是 shell 世界的新手,正在编写一个简单的脚本来从 300 多个服务器中提取文件。想知道我是否像下面这样写,那么它会一次性登录到所有 300 台服务器并提取文件,或者它会逐一进行。另外,我可以为一个用户提供无密码登录,我可以在 $username 中提及该用户,或者我需要为此创建其他脚本。
#!/bin/bash
cd /backup
for server in $(cat server.txt)
do
scp -r $username@$server:/tmp/backup/*.txt* .
done
答案1
这么写的话,就一一去吧。
看一下parallel
(可能需要安装软件包)并行执行。另外,不要一次执行所有 300 个操作,限制并发执行的数量(否则整体会变慢)。
您可以无密码登录;您需要创建一个 ssh 密钥对,将私钥放入您执行操作的机器中scp
,并将公钥放入~/.ssh/authorized_keys
您复制的所有 300 台机器中。如果密钥在正确的位置,您无需更改脚本。
答案2
就像 dirkt 所说,这将按顺序执行每个命令——即,在第一个命令完成之前,它不会启动下一个副本。
如果您希望脚本在合理的时间内运行,您可以将字符附加&
到行或代码块的末尾(放在大括号中)以在后台运行命令并立即启动下一个命令,如下所示:
#!/bin/bash
for server in $(cat server.txt); do
scp -r $username@$server:/tmp/backup/*.txt* /backup/ &
done