개발 중에 랩톱에 작성한 코드를 원격 호스트의 테스트 환경과 동기화하는 데 사용하는 도구가 있습니다. 이를 통해 git-commit/push/pull/build 등이 필요 없이 변경 사항을 빠르게 테스트할 수 있습니다. fswatch 및 rsync를 사용하여 구현되므로 로컬에서 변경한 내용을 원격 환경에 자동으로 스트리밍합니다. 그러나 때때로 이 도구를 여는 것을 잊어버리고 내 코드가 작동하지 않는 이유를 파악하는 데 필요한 것보다 더 많은 시간을 낭비했기 때문에 문제가 발생했습니다.
- 내 원격 호스트에 이 상황을 감지할 수 있는 프로그래밍 방식이 있나요?어느파일이 최근에(예: 마지막 순간에) 재동기화되었습니까?
- 게다가 말이 되나요?내 거이 도구는 rsync용 도구인가요? 제가 갖고 있는 리모컨이 다른 콘솔과 동기화될 가능성은 거의 없지만, 강력할수록 좋습니다. :)
나의 궁극적인 목표는 파일 동기화가 작동하는 동안 프롬프트 색상을 변경하는 등 무해한 작업을 수행하는 작은 데몬을 원격 호스트에 만드는 것입니다.
답변1
한 가지 해결책은 도구가 데이터 동기화를 완료한 후 현재 날짜/시간을 원격 시스템의 파일에 반영하도록 하는 것입니다. 그런 다음 원격 컴퓨터에서 수행해야 할 작업은 파일을 확인하여 마지막으로 데이터가 동기화된 시간을 확인하는 것입니다.
Linux를 사용하는 경우 커널에 내장된 inotify API를 사용하여 파일 시스템 변경 사항을 감지할 수 있습니다. inotify를 사용하면 어떤 파일이 기록되었는지 감지하고 발생하는 모든 이벤트에 따라 조치를 취할 수 있습니다. (열기, 닫기, 읽기, 쓰기, 삭제, 이동 등)
답변2
fswatch, inotify, logfs 또는 원하는 인터페이스를 사용하여 원격 시스템에 감시 장치를 배치하고 테스트 디렉터리에 대한 쓰기를 감지하도록 할 수 있습니다. 최소한 최근 수정 사항에 대해 알려줄 것입니다. 이러한 메커니즘 중 어느 프로세스가 문제를 일으켰는지 식별할 수 있는 것은 아닙니다. 예를 들어, logfs는 식별할 수 있지만 inotify는 식별할 수 없습니다.
시계를 켜는 것을 기억하는 문제가 여전히 있습니다. start-testing-now 스크립트를 사용하여 시계를 열고 시계가 아직 시작되지 않은 경우 먼저 동기화하면 이를 무의미하게 만들 수 있습니다.
하지만 제 생각에는 이 경우 가장 간단한 해결책은 전혀 동기화하지 않는 것입니다. 대신 SSHFS를 사용하여 로컬 트리를 테스트 시스템에 탑재하세요.
바라보다연결된 컴퓨터에 대한 역방향 SSH 연결을 어떻게 구성합니까?원격 컴퓨터에서 로컬 컴퓨터로 SSH 연결을 시작하는 방법을 알아보세요.
답변3
나는 효과적인 해결책을 생각해 냈습니다. 해결 방법은 파일 크기를 주기적으로 측정하고 파일 크기가 변경되면 파일 자체에 복사하는 것입니다. 이 개념을 설명하기 위한 bash 스크립트가 있지만 전체 폴더와 하위 폴더를 측정하려면 이를 확장해야 하며, 폴더 크기가 변경된 경우 변경된 파일을 찾아 해당 개별 파일을 자체에 복사해야 합니다. 최상위 수준의 .ignore 파일도 있기를 바랍니다. 이에 대한 개선 사항이 있으면 공유해 주세요. 완전한 스크립트가 필요합니다. 내 간단한 스크립트는 다음과 같습니다.
while [ 1 ]; do
x=$(du -b .)
sleep 3
y=$(du -b .)
if [ ! "$x" = "$y" ]; then
cp App.js x
cp x App.js
fi
done