이 질문은 내가 Stackoverflow에서 제기 한 다른 질문에서 발생합니다 . 내가 사용하고 감시자를 - 같은 문제에 적용 Incron - 폴더 멀리 변화와 자동 다람쥐 보관에 이러한 변경 사항에 대한 하위 폴더를 모니터링 할 수 있습니다.
목적을 위해 write_close
이벤트를 모니터링합니다 IN_CLOSE_WRITE
. 원래는 modify
이벤트를 보고있었습니다 ( 예 : IN_MODIFY). 이것이 작동하는 동안 큰 파일을 쓸 때 두 번 이상 실행된다는 것을 알았습니다. 그것은 공평하게 들려서 IN_CLOSE_WRITE
주어진 파일에 대해 한 번만 발생한다고 가정하는 것이 합리적이라고 생각한 이후 로 전환했습니다 .
그러나 그렇지 않습니다. Nano에서 생성 된 매우 작은 텍스트 파일 (단 하나의 문자)에도 이벤트가 두 번 발생합니다. 기껏해야 동일한 파일이 Dropbox에서 두 번 동기화 될 때 불필요한 트래픽이 발생할 수 있습니다. 내 경우에는 첫 번째 이벤트에서 동기화를 수행 한 다음 서버 측 파일을 삭제하므로 재앙이 발생합니다. 결과-두 번째 이벤트에서 Dropbox 사이드 파일은 0 바이트 파일이됩니다.
다른 작업을 수행하기 전에 동기화 스크립트를 10 초 동안 절전 모드로 유지하여 Dropbox 동기화를 시도하기 전에 문제의 파일이 여전히 존재하는지 확인합니다. 두 번째 반복에서 파일이 누락되고 스크립트가 종료되기 때문에 작동합니다.
기이하게 들린다. 아마도 나쁜 해킹은 아니지만 이해하기를 원할 것입니다. 왜 IN_CLOSE_WRITE
이벤트 조차도 두 번 이상 발생합니까?
추가 정보
- 감시자의 인스턴스가 여러 개 실행되고 있지 않은지 확인하십시오.
출력 ps ax|grep watcher.py
23880 ? Sl 0:01 python /usr/local/bin/watcher.py restart
24977 pts/0 S+ 0:00 grep --color=auto watcher.py
파일 시스템은 ext4
입니다. Incron에서 정확히 같은 문제가 발생했다고 언급해야합니다. 를 통해 실행되는 배치 스크립트에서 Watcher 데몬을 시작합니다 /etc/rc2.d
. Incron OTH는 기본 apt-get install incron
설치 를 통해 아무런 혼란없이 시작됩니다 .
내 watcher.ini
파일 의 본질은 아래와 같습니다.
[DEFAULT]
logfile=/var/log/watcher.log
pidfile=/var/run/watcher.pid
[job1]
watch=/path/to/watch
events=write_close
excluded=
recursive=true
autoadd=true
command=/home/datastore.php $filename
datastore.php
지저분한 Dropbox 업로드 + 소스 삭제 코드없이 스크립트가 두 번 실행되는지 확인하기 위해 스크립트를 필수 요소로 축소했습니다 .
#! /usr/bin/php
<?php
file_put_contents('/tmp/watcher',$argv[1],FILE_APPEND);
?>
그런 다음 해당 경로에 작은 파일을 만든 다음 검사했습니다 /tmp/watcher
. 문제는 여전히 지속됩니다. 파일에는 여전히 두 개의 연속 항목이 $argv[1]
있습니다.
ext4
있으며 두 개의 Watcher 인스턴스가 실행되고 있지 않다고 확신합니다. Incron과 동일한 문제가 발생했습니다.
delete
루틴 을 비활성화 하고 다시 시도 할 수 있습니까 ?
unlink
문제의이 지속를 보내고