bash 脚本中的 rsync 似乎可以工作,但目标服务器上的文件并未更新

bash 脚本中的 rsync 似乎可以工作,但目标服务器上的文件并未更新

我有一台服务器,用于进行 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/

相关内容