Câu hỏi rsync xóa và đồng bộ hóa nhiều máy


Tôi có tình huống sau: Tôi có nhiều máy khách (ví dụ, client1, client2, client3) và tôi muốn giữ một thư mục nhất định ("/ code") được đồng bộ trên tất cả các máy. Hiện tại, tôi có một tập lệnh rsync được thiết lập trên một máy chủ riêng biệt để giữ cho các tệp được đồng bộ hóa. Tức là, trên máy chủ, tôi làm điều gì đó như sau:

# Step 1: update/copy all files from each client to the server
rsync -vrtu client1:/code/ /code
rsync -vrtu client2:/code/ /code
rsync -vrtu client3:/code/ /code

# Step 2: synchronize each client with the server
rsync -vrtu /code/ client1:/code
rsync -vrtu /code/ client2:/code
rsync -vrtu /code/ client3:/code

Tôi chạy này bằng cách sử dụng cron và nó propogates bất kỳ tập tin cập nhật trên một máy cho tất cả các máy. Vấn đề là việc xóa không được lan truyền. Hơn nữa, nếu tôi hiểu tùy chọn rsync --delete một cách chính xác, có vẻ như việc sử dụng --delete sẽ giữ cho bất kỳ tệp mới nào từ các máy khách của tôi không được thêm vào máy chủ. Đúng không? Tôi chỉ muốn giữ các tệp trên cả ba khách hàng của tôi hoàn toàn đồng bộ hóa (bổ sung, xóa và sửa đổi). Có một cách đơn giản để làm những gì tôi muốn bằng cách sử dụng rsync?


0
2018-03-02 00:45


gốc




Các câu trả lời:


thêm --xóa vào rsync, sẽ xóa các tệp ở bên nhận. Vì vậy, sẽ không có gì để đồng bộ hóa trong bước 2. Tất cả các tệp mới trên máy khách sẽ không còn nữa. Rsync - delete sẽ chỉ nhắm mục tiêu thư mục đang được rsynced.

Bạn có thể sử dụng nhiều thư mục. I.e sử dụng một thư mục dành riêng cho các tệp mới trên máy khách.

Bạn cũng nên xem xét một hệ thống điều khiển phiên bản như git, cho loại đồng bộ hóa mã này. Bằng cách đó bạn sẽ có được sự hợp nhất rõ ràng hơn nếu một tập tin trên máy khách được thay đổi. Bạn có thể quay trở lại, sử dụng một số ngành khác nhau, xem ai đã thay đổi những gì và nhiều hơn nữa.

Trong git bạn sử dụng hook sau khi nhận cho điều này, và kiểm tra nhánh hiện tại vào thư mục làm việc của bạn.


1
2018-03-02 01:02