두 Linux 시스템 간의 자동 파일 전송

두 Linux 시스템 간의 자동 파일 전송

안녕하세요, 저는 두 대의 리눅스 머신을 가지고 있습니다. 서버 A(LUbuntu) 및 서버 B(Raspbian). 내가 하고 싶은 일은 서버 A가 서버 B의 특정 디렉터리(A에 마운트된 NFS)를 확인하고 파일이 있으면 서버 A의 위치로 전송하도록 하는 것입니다. 이상적으로는 B에 전송된 모든 파일이 전송 후 삭제됩니다. 나는 A와 B를 동기화하고 싶지 않으며 A--->B로부터의 전송도 원하지 않고 B--->A에서만 전송을 원합니다. 또한 이상적으로는 중복된 파일을 전송하고 싶지 않고 삭제하기만 하면 됩니다.

너무 많은 스크립팅 없이 이를 달성하는 가장 좋은 방법은 무엇입니까? A는 항상 온라인 상태가 아니므로 파일 전송을 재개하는 것이 중요합니다.

이 작업을 수행할 수 있는 기존 소프트웨어가 있습니까? 아니면 모든 스크립트를 직접 작성해야 합니까?

감사해요

답변1

이 체계의 기본적인 결함은 호스트 B가 언제 파일을 복사하는 것이 안전한지 알 수 없다는 것입니다. 호스트 A가 NFS 공유에 파일을 쓰고 있는데 호스트 B가 완전히 쓰기 전에 파일을 가져오는 경우에는 어떻게 됩니까? 호스트 B는 파일의 일부를 복사하고 (부분) 복사가 성공하면 파일을 삭제합니다.모두호스트 A가 쓰기를 완료하지 않았기 때문에 복사되지 않은 부분을 포함한 파일입니다.

즉, 이것은 매우 간단한 것 같습니다 rsync. man페이지, 특히 --partial옵션, 아마도 --checksum옵션을 읽으십시오.특히 해당 부분에 대한 경고 --remove-source-files옵션. *.new호스트 A가 호스트 B가 복사할 파일을 작성한 다음 파일 이름을 .new원래대로 바꾸는 경우 와 같이 파일 이름을 사용하여 제안된 해결 방법이 효과가 있을 수 있습니다. 단일 파일 시스템 내에서 이름을 바꾸는 것은 일반적으로 원자성 작업이므로 호스트 B는 인내심을 갖고 모든 *.new 파일을 무시해야 합니다. 이름이 바뀌면 호스트 B는 cron다음에 작업이 실행될 때 이를 전송합니다.

답변2

내가 제안 할게스냅 사진.

이것은 기본 Perl 스크립트입니다. 스크립트는 이미 완료되어 있습니다. /usr/local/etc/rsnapshot.conf파일을 편집하고 지정하면 됩니다.원천그리고목적지사본용.

그럼 넌 달려가/usr/local/bin/rsnapshot 실행 파일이 배치된 것으로 생각되는 위치

자동 실행: crontab -e그리고 다음과 같은 작업을 수행합니다.

0 12 * * *   /usr/local/bin/rsnapshot daily

crontab 구문은 다음과 같습니다.

minute   hour   day_of_month   month   day_of_week

내 crontab 구문에 따르면 지정된 내용은 매일 오후 12시에 실행됩니다.

0 22 * * 2  /usr/local/bin/rnsapshot daily   # will run at 8:00pm only every Monday

rsnapshot Perl 스크립트에 대한 일일 입력 매개변수에 대한 rsnapshot 설명을 읽어보세요.

rsnapshot은 필요한 모든 것을 설정한 경우 무엇이든 복사할 수 있습니다. [설명에 언급됨]

관련 정보