Tôi đã gặp điều này với rsync
trong quá khứ là tốt. Giải pháp khắc phục nó cho tôi là chạy nó từ trong một screen
phiên, có thể giúp duy trì kết nối đến máy chủ từ xa.
screen -LS rsync
[execute your rsync command]
Ctrl-A+D to detach from the session
Bạn có thể kiểm tra trạng thái bằng cách chạy screen -x rsync
(hoặc bất cứ điều gì bạn quyết định đặt tên phiên nếu bạn đặt tên cho nó, không bắt buộc). Điều này sẽ gắn lại shell hiện tại của bạn vào phiên đó. Chỉ cần nhớ tách ra một lần nữa sau khi bạn đã kiểm tra trạng thái để nó tiếp tục chạy trong nền.
Bạn cũng có thể thực thi lệnh để chạy screen
trong nền trong một lần trượt thất bại bằng cách thực hiện [ai đó vui lòng sửa cho tôi nếu tôi sai] screen -dm 'command'
. Bạn có thể muốn man screen
trước khi thử cái cuối cùng.
BIÊN TẬP:
Tôi đang chỉnh sửa câu trả lời của mình vì bạn đã xác nhận rằng screen
không cung cấp hỗ trợ nào trong kịch bản này, nhưng bạn đã trả lời nhận xét của tôi đề nghị thử scp
xem loại kết quả nào bạn nhận được, mà bạn đã trả lời đủ kỳ lạ, nó hoạt động tốt.
Vì vậy, câu trả lời mới của tôi là: sử dụng scp
- hoặc ssh
(với tar
) - thay vìrsync
Cấp, scp
không hỗ trợ số lượng lớn các tính năng như rsync
, nhưng bạn thực sự sẽ ngạc nhiên để khám phá chỉ có bao nhiêu tính năng mà nó không hỗ trợ mà gần như giống hệt như của rsync
.
Kịch bản thế giới thực cho scp
và các lựa chọn thay thế khác cho rsync
:
Trước đó, tôi được giao nhiệm vụ tạo một tập lệnh shell sẽ lấy các bản ghi từ các máy chủ sản xuất của chúng tôi và lưu trữ chúng cục bộ trên một máy chủ web để các nhà phát triển có thể truy cập chúng cho mục đích khắc phục sự cố. Sau khi thử không thành công để nhóm Unix cài đặt rsync
trên máy chủ của chúng tôi, tôi đã tìm ra cách giải quyết bằng cách sử dụng scp
nó cũng hoạt động tốt.
Điều đó đang được nói, gần đây tôi đã sửa đổi tập lệnh để tất cả những gì nó sử dụng là ssh
và tar
- GNU tar
/ gtar
, chính xác. GNU tar
hỗ trợ nhiều tùy chọn mà bạn thực sự sẽ tìm thấy rsync
, chẳng hạn như --include
, --exclude
bảo toàn quyền / thuộc tính, nén, v.v.
Cách bây giờ tôi thực hiện điều này là bằng cách gửi ssh
đến máy chủ từ xa (thông qua pubkey auth) và sử dụng gtar -czf - [other options such as --include='*.log' and --exclude='*core*', etc.]
- điều này ghi tất cả thông tin stdout
, sau đó được dẫn [cục bộ] để tar -xzf
không có thay đổi nào được thực hiện trên máy chủ sản xuất từ xa và tất cả các tệp đã được chuyển đến máy chủ cục bộ. Đó là một sự thay thế tuyệt vời rsync
trong trường hợp này. Điều quan trọng duy nhất không hỗ trợ tar
cũng không phải scp
là sao lưu gia tăng và mức độ kiểm tra lỗi ở cấp độ khối rsync
.
Lệnh đầy đủ mà tôi đang đề cập khi sử dụng ssh
và tar
sẽ là một cái gì đó như thế này (từ xa là Solaris 10; cục bộ là Debian, với giá trị của nó):
cd /var/www/remotelogs
ssh -C user@remotehost "cd /path/to/remote/app.directories; gtar -czf - --include='*.log' --exclude='*.pid' --exlude='*core*' *" | tar -xz
Trong kịch bản của bạn, nó sẽ ngược lại - tar -cf -
cục bộ và chuyển sang máy chủ từ xa thông qua ssh user@remotehost "tar -xf -"
- có một câu trả lời khác tham chiếu loại hành vi này nhưng không đi sâu vào chi tiết.
Có một vài lựa chọn khác mà tôi đã đưa vào để tăng tốc mọi thứ. Tôi hẹn giờ mọi thứ không ngừng nghỉ để có được thời gian thực hiện càng thấp càng tốt. Bạn sẽ nghĩ rằng sử dụng nén với tar
sẽ là vô nghĩa, nhưng nó thực sự tăng tốc mọi thứ lên một chút, cũng như sử dụng -C
cờ với ssh
để cho phép ssh
nén. Tôi có thể cập nhật bài đăng này vào một ngày sau đó để bao gồm lệnh chính xác mà tôi sử dụng (rất giống với những gì tôi đã đăng), nhưng tôi không cảm thấy muốn truy cập VPN vào lúc này kể từ khi tôi đi nghỉ tuần này.
Trên Solaris 10, tôi cũng sử dụng -c blowfish
, vì đây là mật mã nhanh nhất để xác thực và cũng giúp tăng tốc mọi thứ, nhưng Solaris 11 của chúng tôi không hỗ trợ hoặc tắt bộ mật mã này.
Ngoài ra, nếu bạn chọn sử dụng tùy chọn ssh
/ tar
, thực sự sẽ là một ý tưởng tốt để triển khai giải pháp sử dụng ban đầu của tôi screen
nếu bạn đang thực hiện sao lưu sẽ mất một lúc. Nếu không, hãy đảm bảo các cài đặt giữ lại / hết thời gian trong bạn ssh_config
được điều chỉnh vừa phải, hoặc phương pháp này cũng sẽ rất có thể gây ra vỡ đường ống.
Ngay cả khi bạn đi cùng scp
, tôi luôn thấy đó là một cách thực hành tốt nhất để sử dụng screen
hoặc tmux
khi thực hiện một thao tác loại này, chỉ trong trường hợp . Nhiều lần tôi không làm theo lời khuyên của chính mình và không thực hiện được điều này, nhưng thực sự nên sử dụng một trong những công cụ này để đảm bảo rằng công việc từ xa không bị hỏng vì phiên vỏ hoạt động của bạn bị ngắt kết nối bằng cách nào đó.
Tôi biết bạn muốn tìm ra nguyên nhân gốc rễ của rsync
vấn đề của bạn . Tuy nhiên, nếu điều này thực sự quan trọng, đây là hai cách giải quyết tuyệt vời mà bạn có thể thử nghiệm trong lúc này.
kerberos
để xác thực trên máy chủ từ xa.