Rsync in einem Bash-Skript scheint zu funktionieren, aber die Dateien werden auf dem Zielserver nicht aktualisiert


1

Ich habe einen Server, auf dem ich meine Webentwicklung und Tests durchführe, und ich habe eine Reihe von Frontend-Servern, die hinter einem Load Balancer sitzen. Ich habe ein einfaches Bash-Skript geschrieben, um ein Verzeichnis auf meinem Entwicklungsserver auf allen Produktionsservern zu rsyncieren, wenn ein Fehler behoben wird usw.

Das rsync-Gerät wirkt, aber wenn ich tatsächlich zu den anderen Servern gehe, wurde keine der Dateien aktualisiert. Was mache ich falsch?

#!/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

Im Moment habe ich nur eine IP-Adresse in der for-Schleife, aber im Laufe der Zeit werde ich weitere hinzufügen. So führe ich das Skript und die abgekürzte Ausgabe aus:

[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 root@xxx.xxx.xxx.xxx:/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]#

Wenn ich den Befehl erneut ausführen, scheint Rsync ordnungsgemäß zu funktionieren und zeigt erwartungsgemäß keine Dateien in der Liste an, angeblich, weil sie alle aktualisiert wurden. Wenn ich mir jedoch die Dateien auf dem Server xxx.xxx.xxx.xxx ansehe, wurden sie überhaupt nicht aktualisiert.


Wählen Sie eine Datei und find es im ziel, ich glaube du schaust (kopierst) in den falschen ordner
perreal

Hm, du hast recht. Ich frage mich, ob dies mit einem nachgestellten Schrägstrich in $ {directory} zu tun hat.
Kenny Wyland

diese sind gleichwertig: rsync -av /src/foo /dest. rsync -av /src/foo/ /dest/foo
perreal

Richtig, mein Problem trat auf, als ich rsync -av / src / foo benutzer @ host: / src / foo ausführte. Dabei wurde das Verzeichnis wie von Ihnen vorgeschlagen dupliziert, und es wurde / src / foo / foo erstellt
Kenny Wyland

Antworten:


1

Aufgrund der strengen Anforderungen für nachfolgende Schrägstriche bei der Verwendung von rsync musste ich nur sicherstellen, dass beim rsyncieren eines Verzeichnisses ein nachstehender Schrägstrich gesetzt wird:

Schlecht:

# ./rsync_to_frontend.sh /var/www/scripts

vs gut:

# ./rsync_to_frontend.sh /var/www/scripts/
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.