프로세스 텍스트 파일을 ftp'ed 으로 설정 디렉토리에서 호스팅 서버

StackOverflow https://stackoverflow.com/questions/208772

문제

상황은 다음과 같습니다:

는 일련의 원격 워크스테이션 필드 데이터 수집 및 ftp 수집된 필드 서버로 데이터를 통해 ftp.데이터 전송 CSV 파일로 저장되어있는 독특한 디렉토리에 대한 각 워크스테이션에 FTP 서버입니다.

각 워크스테이션이 보내는 새로운데 10 분의 원인 이전에 데이터를 덮어쓸 수 있습니다.우리는 어떻게든 연결 또는 저장 이 데이터를 자동으로 합니다.워크스테이션의 처리가 제한될 수 없습장으로 임베디드 시스템입니다.

한 가지 제안을 제공했을 실행 cronjob 에 FTP 서버,그러나이 서비스 약관이 제한을 허용 cronjobs 에서 30 분간격으로 공유되는 호스팅.의 번호를 부여 워크스테이션에 업로드하고 10 분 간격 업로드하는 것 같은 cron 작업 30 분 거리에 제한이 전화가 문제가 될 수 있다.

은 다른 접근할 수 있는 건?사용 가능한 서버 사이드 스크립트 언어는 perl,php,python.

업그레이드 전용 서버로 필요할 수 있습니다,하지만 나는 아직을 얻을 입력에 어떻게 이 문제를 해결하기 위해서는 가장 우아한 방식이다.

도움이 되었습니까?

해결책

가장 현대적인 리눅스의 지원 inotify 도록 귀하의 프로세스할 때 알아의 내용을 diretory 가 변경되었다,그래서 당신도 필요하지 않을 설문 조사.

편집:과 관련하여 의견은 아래에 표시 Baker:

"주의해야 하지만,당신이 통로 파일을 만들지 않습니다.그래서 당신이 필요로하는 경우에 확인하기 위해 어떤 방법으로 당신이 선택하지 않은 부분적인 파일이 있습니다."

는 일이 일어날 것으로 inotify 시계 당신에 설정된 디렉토리 수준을 확인하는 방법은 당신이 다음을 선택하지 않은 부분적인 파일을 설정하는 것이 더 inotify 계에 새로운 파일을 찾기 위해 IN_CLOSE 이벤트 당신이 알 수 있도록 파일에 기록되었다.

한 번의 과정이 있거나,삭제할 수 있습니다 inotify 계에 이 새로운 파일과 프로세스에서는 공간입니다.

다른 팁

대상 디렉토리를 계속 여론 조사하는 지속적인 데몬을 고려할 수 있습니다.

grab_lockfile() or exit();
while (1) {
    if (new_files()) {
        process_new_files();
    }
    sleep(60);
}

그런 다음 Cron 작업은 30 분마다 데몬을 시작하려고 시도 할 수 있습니다. 데몬이 잠금 파일을 잡을 수 없다면 단지 죽기 때문에 여러 데몬이 달리는 것에 대해 걱정할 필요가 없습니다.

고려해야 할 또 다른 방법은 HTTP 게시물을 통해 파일을 제출 한 다음 CGI를 통해 처리하는 것입니다. 이런 식으로, 당신은 그들이 제출 시점에 제대로 다루어 졌음을 보장합니다.

30 분 제한은 정말 어리석은 일입니다. Linux의 시작 프로세스는 비용이 많이 드는 작업이 아니므로 새로운 파일을 확인하는 것이라면 그보다 더 자주하지 않을만한 충분한 이유가 없습니다. 우리는 매 순간마다 실행되는 Cron 작업이 있으며 성능에 눈에 띄는 영향을 미치지 않습니다. 그러나 나는 그것이 당신의 규칙이 아니라는 것을 알고 있으며, 당신이 그 호스팅 제공 업체를 고수하려면 선택의 여지가 없습니다.

당신은 어떤 종류의 긴 달리기 데몬이 필요합니다. 쉬운 방법은 정기적으로 설문 조사를하는 것입니다. 아마도 그것이 내가하는 일일 것입니다. inotify, 파일이 생성되는 즉시 통보를 받으면 더 나은 옵션입니다.

Linux :: Inotify를 사용하여 Perl에서 Inotify 또는 Python에서 Pyinotify를 사용할 수 있습니다.

파일이 닫힐 때가 아니라 파일이 생성되는 즉시 알림을 받으므로주의하십시오. 따라서 부분 파일을 선택하지 않도록하는 방법이 필요합니다.

폴링을 사용하면 부분 파일을 볼 가능성이 적지 만 결국 발생하고 발생할 때 불쾌하기 어려운 버그가 될 것이므로 지금 문제를 처리하는 것이 좋습니다.

기존 FTP 서버 설정을 유지하려면 Inotify 또는 DeMonized 프로세스와 같은 것을 사용하여 업로드 디렉토리를 시청하는 것이 좋습니다. 다른 FTP 서버로 이동해도 괜찮다면 살펴볼 수 있습니다. pyftpdlib Python FTP 서버 LIB입니다.

나는 Pyftpdlib의 Dev 팀의 일원이었고 더 일반적인 요청 중 하나는 업로드를 마친 후 파일을 "처리"하는 방법이었습니다. 그 때문에 우리는 an을 만들었습니다 on_file_received() 업로드 완료시 트리거되는 콜백 메소드 (참조 이슈 #79 자세한 내용은 문제 추적기에서).

Python이 편안하다면 FTP 서버로 pyftpdlib를 실행하고 콜백 메소드에서 처리 코드를 실행하는 것이 좋습니다. pyftpdlib는 비동기식이며 다중 스레드가 아니므로 콜백 메소드가 차단할 수 없습니다. 장기 실행 작업을 실행 해야하는 경우 실제 처리 작업에 별도의 Python 프로세스 또는 스레드를 사용하는 것이 좋습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top