저는 Dazzle이라는 USPS 배송 패키지와 인터페이스하는 시스템을 개발 중입니다. 이 시스템의 일부는 모니터링 데몬을 포함합니다.이 데몬은 탭으로 구분 된 값 파일을 가져 와서 Dazzle이 인식 할 수있는 XML로 변환 한 다음 레이블 생성을 위해 눈을 부시게합니다. 그리고이 부분은 잘 작동합니다. 그러나 Dazzle이 생성 한 출력 파일을 구문 분석하여 데이터베이스로 가져 오는 것도 제가하고 싶은 것입니다.Windows 프로그램이 SAMBA를 통해 액세스하는 파일 작성을 중단 한 시점을 Linux 데몬이 어떻게 알 수 있습니까?
Dazzle은 Windows에서 실행됩니다. 내 모니터링 데몬은 Perl로 작성되었으며 Linux에서 실행됩니다. 제 리눅스 시스템은 삼바를 통해 마운트 된 Dazzle의 입출력 디렉토리를 가지고 있습니다.
Dazzle이 출력 파일을 쓰는 시간과 출력이 완료되는 시간 사이에 측정 가능한 지연이 있습니다. 내가 알고 싶은 것은 Dazzle이 출력 파일을 쓰는 것을 기다릴 수있는 방법입니다. 나는 파일을 열어보고 그것에 flock($fh, LOCK_SH)
을 해보려고했으나 아무런 효과가없는 것처럼 보였다.
EDIT : 아래의 "mobrule"의 의견을 기반으로 한 아이디어가 있습니다. Dazzle은 출력 파일을 XML로 작성합니다. 발송물의 각 패키지는 태그로 묶여 있으며 전체 문서는 태그로 묶여 있습니다. 따라서 파일이 완성되기 전에 파일을 읽기 시작하면 조치를 취하기 전에 적절한 닫는 태그를 기다릴 수 있습니다.
또한 현재 내가하고있는 일을 언급해야합니다. 출력 XML 파일이 생성되었음을 감지하면이를 구문 분석합니다. 구문 분석에 실패하면 잠자기 후 다시 시도하십시오. 실패하면 다시 두 번 자고 다시 시도하십시오. 이것은 64 초의 시간 초과로 테스트 할 때 꽤 잘 작동합니다.
Dazzle이 동일한 잠금 메커니즘을 사용하여 파일을 잠그는 경우에만 해당됩니다. Dazzle이 Perl 스크립트가 아닌 경우에는 그렇지 않을 가능성이 높습니다. – mob
좋은 지적입니다. Dazzle은 Windows 응용 프로그램이며 Perl로 작성되지 않았습니다. 따라서 Perl의 파일 잠금은 "권고"일 뿐이므로 작동하지 않습니다. 동정, 그렇지 않다면 그것은 내가들은 최고의 해결책이다. –