2009-07-31 3 views
4

폴더에 계속 폴링하는 응용 프로그램이 있습니다. 파일이 폴더에 ftp되면 응용 프로그램은이 파일을 다른 폴더로 옮겨서 처리해야합니다.ftp가 완료되었는지 여부를 확인 하시겠습니까?

여기에서는 ftp가 완료되었는지 여부를 확인하는 옵션이 없습니다.

"lsof"명령이 기술 포럼에서 제안되었습니다. 파일 상태를 알려주는 파일 설명 열이 있습니다.

이것은 무료 bsd 명령이며 이전 버전의 Linux에는 없었기 때문에이 명령의 사용법을 명확히 설명하고자합니다.

여러분이 파일 검증에 대한 귀하의 경험을 말씀해 주시겠습니까? 그리고 다른 대안 솔루션이 있습니까?

또한이 유틸리티를 사용할 때 위험이 있습니까?

미리 도움을 청하십시오.

감사합니다, 매튜 Liju

답변

4

우리는 다른 방법으로 전에 이런 짓을했습니다.

방법 1 : 사용자가 파일을 전송하는 과정을 제어 할 수있는 경우

, 그것은 감시 파일 다음에 파일 자체를 보낼 수있다. 예를 들어, 실제 파일 "contracts.doc" 다음에 1 바이트 "contracts.doc.sentinel"을 전송하십시오.

그런 다음 리스너 프로세스에서 감시 파일을주의하도록하십시오. 그 중 하나가 작성되면 동등한 데이터 파일을 처리 한 다음 두 파일을 모두 삭제해야합니다.

하루가 지나서 해당 센티넬 파일이없는 모든 데이터 파일은 삭제됩니다. 전송에 실패했습니다.

방법 2 :

이 파일에 눈 자체 (특히 마지막으로 수정 한 날짜/시간)을 유지합니다. 과거 수정 시간이 N 분 이상인 파일 만 처리하십시오. 이렇게하면 파일 처리 지연이 늘어나지 만 일반적으로 파일이 5 분 안에 기록되지 않으면 완료됩니다.

결론 :

그 두 방법은 예전에 우리가 사용되어왔다. 첫 번째 파일을 선호하지만 파일을 보내는 프로세스를 변경할 수없는 경우 두 번째 파일을 한 번 사용해야했습니다.

첫 번째 이점은 을 알고 있다는 점입니다. 센티넬 파일이 나타날 때 파일 준비가되었습니다. lsof (처리 할 준비가되어있는 프로세스로 열려 있지 않은 파일을 처리한다고 가정 함)와 타임 스탬프를 사용하면 FTP가 중간에 충돌하여 파일의 절반을 처리했을 수 있습니다.

+0

팍스에 감사드립니다. 비즈니스가 프로세스를 변경하고 싶지 않기 때문에 첫 번째 접근 방식과 비슷한 문제가 있습니다. 나는 두 번째 접근 방식을 택하기로 결정했다. –

1

일반적으로 이러한 종류의 문제에는 세 가지 방법이 있습니다.파일이 전송 될 때, 추가 파일이 해당 전송을 표시하는 전송되도록 신호 파일을 제공

  1. 은 (전송이 완료 나타 내기 위해 그 디렉토리 내에서이 로그 파일에 항목을 추가 완료 동시성 문제를 피하기 위해 디렉토리를 업데이트하는 단일 피어가있는 경우에만 작동 함)
  2. 완전성을 확인하기 위해 파일을 구문 분석합니다. 예 : 파일이 길이 필드로 시작합니까? 아니면 분명히 불완전합니까? 예 : 불완전한 XML 파일을 구문 분석하면 끝 요소가 없어 구문 분석 오류가 발생합니다. 파일의 크기와 형식에 따라 사소하거나 시간이 많이 걸릴 수 있습니다.

lsof 귀하의 Linux 이식성 문제를 확인했지만 가능합니다. 이것을 사용한다면, 인간이 읽을 수있는 것보다 다른 프로그램이 처리하기에 적합한 출력을 포맷하는 -F 옵션을 주목하십시오.

편집 : 팍스 내가 잊었다 네 번째 방법 확인 - 파일의 타임 스탬프가 시간에 업데이트하지 않았습니다 사실을 사용하여 (!).

+0

브라이언에게 감사의 말을 전합니다. 그러나 입력 파일 구문 분석은 형식이 지정되어 있고 비즈니스 프로세스 변경에 동의하지 않으므로 지루한 작업입니다. –

0

다섯 번째 방법이 있습니다. FTP 세션이 아직 활성 상태인지 확인할 수도 있습니다. 이것은 모든 피어가 자신의 ftp 사용자 계정을 가지고있는 경우 작동합니다. 사용자가 FTP에서 로그 오프하지 않는 한 파일이 완료되지 않았다고 가정합니다.

관련 문제