2011-11-04 2 views
1

두 대의 기계가 각각 하나의 프로세스를 실행합니다. 머신 A의 쉘 프로세스는 B 머신을 처리하기위한 scp를, B의 자바 프로세스는이 파일들을 사용할 것이다. 두 프로세스 모두 crontab 작업으로 실행됩니다.기계간에 이러한 동기화를 달성하기에 좋은 디자인은 무엇입니까?

동기화/원 자성 등을 달성하는 방법은 무엇입니까? 그 파일 전체를 보내는 방법.

그래서 B에 해당 프로세스는 항상 핸들러가 .. 부패하지 않는 최신의 완전한 파일에 액세스 할 수 있습니다

답변

2

원자 이동이 가능한 파일 시스템을 사용한다고 가정하면 그렇게 할 수 있습니다. 또는 기호 링크를 사용하십시오.

A는 파일을 B의 임시 위치에 복사합니다. 업로드가 완료되면 이동 또는 심볼릭 링크로 파일을 예상 위치로 재배치합니다. 그러면 B는 완전히 업로드 된 파일 만 볼 수 있습니다.

최종 프로세스를 만들기 위해 A상의 프로세스가 B로 SSH 할 수없는 경우 업로드가 완료되었음을 나타내는 0 바이트 마커 파일을 추가 할 수 있습니다.

업로드가 FOO.txt 일 때 업로드가 완료되면 FOO.txt.done 파일이 생성됩니다. 그런 다음 B는 * .done 파일에 대한 디렉토리를 스캔하고 연관된 데이터 파일을 사용합니다. 플러스 청소.

+0

A의 프로세스가 B 머신에서 이러한 원자 이동을 수행 할 수 있습니까? – xyz

+0

SSH로 이동을 수행하거나 마커 파일을 사용하여 완료를 알릴 수 있다고 말하여 업데이트했습니다. – ptomli

+0

당신이 머리 꼭대기에서 그것을 기억한다면, ssh를 사용하여 움직이게하는 명령은 무엇입니까? – xyz

0

quick'n'dirty 작업 주위/문제에 대한 솔루션은 사용자를 사용하여 해결 될 수있다 (A에서 SCP를 사용하여) 파일을 복사 할 때 소유권을 설정하고 적절히 chmod를 설정하고 B의 프로세스가 파일에 액세스 할 수 있도록 소유권/사용 권한을 변경하면됩니다.

0

제가 생각하기에 몇 가지 해킹을 제안 할 수 있습니다. 다음 중 하나를 수행 할 수 있습니다 : -

  1. 파일 쓰기의 시작 (잠금 파일 같은) 임시 파일을 생성, 존재는 어느 파일이 기록 및 쓰기 번 임시 파일을 삭제되고 스트리밍되는 것을 의미한다 완료되었습니다. OR
  2. 소비자 프로세스에서 crontab을 제거하고 scp 프로세스가 신호를 보내도록합니다 (JMS/유니 캐스트). 자바 프로세스는 대기열/소켓의 리스너 일 수도 있고 유니 캐스트 수신시 호출 될 수도 있습니다.
관련 문제