我有一台服务器,用于进行 Web 开发和测试,还有一堆位于负载均衡器后面的前端服务器。我编写了一个简单的 bash 脚本,用于在修复错误等时将开发服务器上的目录 rsync 到所有生产服务器。
rsync 似乎可以工作,但当我实际访问其他服务器时,没有任何文件被更新。我做错了什么?
#!/bin/bash
directory=$1
echo "$directory"
set -x
for host in "xxx.xxx.xxx.xxx"
do
rsync -avz -e ssh ${directory} root@${host}:${directory}
done
目前,for 循环中只有一个 IP 地址,但随着时间的推移,我会添加更多 IP 地址。这是我执行脚本的方式和缩写输出:
[root@admin vhosts]# ./rsync_to_frontend.sh /var/www/scripts
/var/www/scripts
+ for host in '"xxx.xxx.xxx.xxx"'
+ rsync -avz -e ssh /var/www/scripts [email protected]:/var/www/scripts
sending incremental file list
scripts/
scripts/fetchTweets.php
scripts/syncMediaFiles.log
scripts/syncMediaFiles.php
.....
sent 7395053 bytes received 1252 bytes 2113230.00 bytes/sec
total size is 36718000 speedup is 4.96
[root@admin vhosts]#
如果我再次运行该命令,rsync 似乎可以正常工作,并且如预期的那样不会在列表中显示任何文件,表面上是因为它们都已更新。但是,当我查看服务器 xxx.xxx.xxx.xxx 上的文件时,它们根本没有更新。
答案1
由于使用 rsync 时对尾随斜杠有严格要求,因此我只需要确保在 rsync 目录时放置尾随斜杠:
坏的:
# ./rsync_to_frontend.sh /var/www/scripts
与优点相比:
# ./rsync_to_frontend.sh /var/www/scripts/