1

У меня есть сервер, на котором я занимаюсь веб-разработкой и тестированием, и у меня есть несколько внешних серверов, которые работают за балансировщиком нагрузки. Я написал простой сценарий bash, чтобы rsync каталог на моем сервере dev для всех рабочих серверов, когда я исправляю ошибку и т.д.

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

На данный момент у меня есть только один IP-адрес в цикле for, но я буду добавлять больше со временем. Вот как я выполняю сценарий и сокращенный вывод:

[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]#

Если я снова запускаю команду, rsync, кажется, работает должным образом и, как и ожидалось, не показывает никаких файлов в списке, якобы потому, что все они были обновлены. Однако, когда я захожу и смотрю файлы на сервере xxx.xxx.xxx.xxx, они вообще не обновляются.

1 ответ1

1

Из-за строгих требований к конечным слешам при использовании rsync, мне просто нужно было поставить косую черту при rsyncing директории:

Плохой:

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

против хорошо:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .