~/A
두 개의 폴더 와 ~/B
일부 콘텐츠가 있습니다 .
lsyncd
구성 파일 을 작성했습니다 ~/.config/lsyncd/lsyncd.conf
.
# NOTE: Use only absolute path names
# NOTE: check "man rsync" for parameters inside "rsync{}".
# Global settings
settings {
logfile = "/home/ziga/.config/lsyncd/lsyncd.log",
statusFile = "/home/ziga/.config/lsyncd/lsyncd-status.log",
statusInterval = 5
}
# Synchronisation A ⟶ B
sync {
default.rsync,
source = "/home/ziga/A",
target = "/home/ziga/B",
delete = true,
rsync = {
binary = "/usr/bin/rsync",
executability = true,
existing = false,
}
}
이것이 내가 lsyncd
시작한 방법입니다.
lsyncd -nodaemon ~/.config/lsyncd/lsyncd.conf
노트:매개변수는
-nodemon
위 명령을 실행하는 터미널에 추가 정보를 제공하기 위한 것입니다.
명령을 실행하면 즉시 동기화가 이루어지며 폴더의 내용이 ~/A
폴더로 전송됩니다 ~/B
. 그것은 중요하지 않습니다.
~/B
내 구성 파일을 기반으로 해당 파일을 삭제하면 삭제되지 않을 것으로 예상했는데 ~/A
이것이 사실입니다! 이는 바람직한 동작입니다. 폴더 내용이 실수로 삭제되는 것을 방지하고 싶습니다 ~/A
.
하지만 이 시점에서 나는 방금 삭제한 파일 이 lsyncd
폴더에 없다는 것을 감지 하고 시작 시 즉시 하는 것처럼 누락된 파일을 폴더에 복사하여 폴더를 다시 동기화할 수 있기를 원합니다 !~/B
~/A
~/B
하지만 그런 일은 일어나지 않았습니다.
이것이 어떻게 달성될 수 있습니까?
답변1
사실, 별도로 다루어야 할 두 가지 질문이 있습니다. 대답하기가 더 쉽기 때문에 먼저 두 번째 것을 살펴 보겠습니다.
그러나 이 시점에서 나는 lsyncd가 ~/B 폴더에 방금 삭제한 파일이 없음을 감지하고 시작 시 즉시 수행하는 것처럼 ~/A에서 ~/B로 누락된 파일을 복사하여 폴더를 다시 동기화할 것으로 기대합니다. !
구성에 따라 다음에서 파일이 삭제될 때 즉각적인 반응을 기대할 수 없습니다.표적. 변화를 관찰 lsyncd
하는데 사용됨inotify
원천파일 트리. 실제로 시작 시 발생하는 초기 동기화 이후에는 처음에 무슨 일이 일어났는지 전혀 알 수 없습니다.표적. 대신, rsync
반영하기 위해 때때로(아래 참조) 호출됩니다.원천나무가 도착하다표적.
이론적으로는 다음 을 통해 lsyncd
대상을 모니터링하는 것도 가능합니다.inotify
대상이 지역인 한. 그러나 일반적으로 그렇지 않습니다. 예와 달리 대상이 원격 호스트에 있다고 가정합니다. 그러면 lsyncd
다음 파일에 대한 알림을 어떻게 받을 수 있나요 ?원격 대상삭제됐나요?
하지만 이는 문제가 되지 않습니다. 다음에 lsyncd
새 동기화가 시작되면( 실행하여 rsync
) 파일이 다시 생성됩니다. 즉, 없음에도 불구하고즉각적인대상에서 삭제된 파일에 대한 반응. rsync
다음 실행 시 다시 복사됩니다. 다음 rsync
실행은 특정 횟수의 변경 후에 발생합니다.원천트리(아래 참조) 또는 시작 시.
lsyncd
동기화 실행 빈도를 구성할 수 있습니다 rsync
. 내가 아는 한 기본 시간 초과가 있지만 추가적으로 lsyncd
1000(기본값)이 변경되는 것을 발견 하면원천트리(통과 ), 그런 다음(시간 초과에 관계없이) 모든 트리를 한 번에 동기화하기 위해 inotify
실행됩니다 . rsync
물론 이것은 rsync
모든 변경 후에 실행하는 것보다 훨씬 낫습니다.
그럼 마지막 질문("어떻게 할 수 있나요?")으로 돌아가서,전혀 할 수 없어, 또는 일부 프로그래밍이 필요합니다. 각각의 경우 데몬을 실행하여 파일 시스템의 변경 사항을 모니터링해야 합니다.표적그런 다음 직접 실행하여 rsync
동기화하세요.원천도착하다표적, 또는 그러한 변경이 발생할 때 다른 데몬에게 알립니다.원천순차적으로 실행합니다 rsync
.
하지만 그러면 더 이상 필요하지 않게 됩니다 lsyncd
. 왜냐하면 이 지식을 사용하면 아마도 자신만의 양방향 동기화 시스템을 구축할 수 있기 때문입니다.
이제 첫 번째 질문에 답해 보겠습니다.
내 구성 파일을 기반으로 ~/B에서 파일을 삭제하면 ~/A에서는 삭제되지 않을 것으로 예상했으며 마찬가지입니다!
귀하의 구성을 고려하면 여기서 무엇이 잘못되었는지 즉시 알 수 없습니다. 이런 일이 실제로 일어나서는 안 됩니다. 그러나 추가 분석을 위한 제안이 있습니다.
시작 시 lsyncd
매개변수를 추가합니다 -log Exec
. 그러면 명령줄에 다음이 표시됩니다.
lsyncd -log Exec -nodaemon ~/.config/lsyncd/lsyncd.conf
그러면 프로세스에서 생성된 모든 명령줄이 기록됩니다 lsyncd
(귀하의 경우 터미널에). 나는 이러한 명령줄을 게시할 때(바람직하게는 원래 질문에 대한 업데이트로) 문제를 식별할 수 있다고 확신합니다. rsync
명령줄 인수를 포함하여 실행 방법이 표시되어야 합니다. 제가 분석하는 데 도움을 드릴 수 있을지 모르지만, 솔직히 말하면 아직 깊이는 없습니다 rsync
.