다음 명령을 실행하여 내 C++ 프로그램에서 rsync를 사용하고 있습니다.system("rsync -rauzvq root@host:/folder");
여러 시스템을 동기화하는 데 사용합니다.
이제 내가 가진 문제는 원격 호스트가 다운되고 여전히 내 프로그램과 동기화되어 있을 때 내 프로그램이 TCP 시간 초과 동안 중단된다는 것입니다. 그래서 rsync 소켓의 TCP 시간 초과 매개변수를 조정해야겠다고 생각했지만 어떻게 (--sockopts가 작동하지 않는지) 모르겠습니다.
이 문제를 해결하는 또 다른 방법은 분기된 시스템 호출을 만들어 특정 시간 초과 후에도 rsync pID가 여전히 존재하는지 확인하고, 그렇지 않으면 종료하는 것입니다. 유일한 단점은 프로세스가 실제로 동기화되어 있는지 확인할 수 없거나 TCP 시간 초과에 걸려 있다는 것입니다.
그럼, 무엇을 시도해 보시겠어요?
답변1
명령줄에서 rsync는 TCP와 직접 통신하지 않지만 전송을 위해 ssh를 사용합니다.
당신은 그것을 사용할 수 있습니다 :
RSYNC_RSH='ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -o ServerAliveCountMax=2' rsync ...