Bash
如何將一個目錄複製到一組伺服器
我需要將目錄複製到文本文件(主機文件)中列出的不同伺服器。
我還沒有找到任何方法可以用 scp 做這樣的事情
scp -r --hostfile ~/directory to_all@servers:~/
我知道如何為一台伺服器執行此操作:
scp -r directory one@server:~/
,但不是很多。伺服器的數量各不相同,但我對所有伺服器都使用相同的使用者名。
最簡單的方法是使用 shell
for
循環。例如:for s in server1 server2 server3 ... serverN ; do scp -r directory/ $s:~/ done
一個小的變化是在一個文件(例如
server-list.txt
)中列出伺服器,每行一個,然後執行以下操作:for s in $(cat servers.txt) ; do scp -r directory/ $s:~/ done
另一個小的變體支持文件
#
中的註釋(包括註釋掉伺服器主機名)servers.txt
:for s in $(sed -e 's/#.*//' servers.txt) ; do scp -r directory/ $s:~/ done
有無數其他方法可以獲取或生成伺服器列表 - 例如執行
mysql
orpsql
查詢以從數據庫中提取列表,text/plain
從 Web 伺服器獲取文件,從 Web 伺服器獲取文件並使用orjson
解析它,還有很多。基本方法保持不變。jq``python -mjson.tool
如果您需要經常使用不同的文件/目錄和/或需要同時在多個伺服器上並行執行 shell 命令,我強烈建議安裝pdsh包並使用
pdcp
(並行分佈式副本)和pdsh
(並行分佈式 shell)命令。pdsh
為大多數發行版打包。在這裡搜尋
pdsh
- 有幾個提到它的問題和答案。