태그 보관물: inotify

inotify

왜 inotify 이벤트가 두 번 이상 발생합니까? 있습니다. 내 경우에는 첫 번째 이벤트에서 동기화를

이 질문은 내가 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]있습니다.



답변

확실하지 않지만 대부분의 첫 번째 write_close는 파일 시간을 작성 시간과 같이 파일 속성에 기록한 후에 만 ​​실제 데이터를 기록합니다. 실제로 rsync는 임시 파일을 만들고 모든 작업이 완료되면 임시 파일을 동일한 폴더의 실제 파일로 이동하므로 rsync를 사용할 때 일반적으로 모니터링하기가 쉬웠으며 이동은 원 자성 작업입니다. 다른 한편으로는, inotify에서 한 번의 호출이 있습니다. 아마도 그것을 사용하면 첫 번째 수정 메시지에서 무언가를 트리거 할 수 있으며 작업을 시작하기 전에 합리적인 시간 동안 수면을 제안했습니다. 나는 지금 이것을 파고 있으며 새로운 것을 발견하면 업데이트 할 것입니다.
/superuser/1133642/traceing-the-moment-when-file-is-completely-copied-to-samba-share-with-inotify


답변

이 의견을 의견으로 게시 할 충분한 담당자가 없지만 임시로 숨겨져있는 파일이 작성되지 않았습니까? inotifywait여러 번 발사 하는 것과 비슷한 문제가 있었지만 편집 할 때 vim이 .swp 파일을 생성하고 닫을 때 이벤트가 발생하기 때문에 이것이 발생한다는 것을 깨달았습니다. 또한 원본 파일에서 닫기 이벤트를 선택합니다.

동일한 파일에서 여러 파일을 실행하는 이벤트를 알 수있는 것처럼 들립니다. 이는 재현 할 수 없었습니다. 이는 임시 파일과 원본에 대해 한 번만 발생합니다.

나는 nano로 빠른 테스트를 시도했지만 임시 파일을 생성하지 않는다고 생각합니다 (적어도 몇 가지 경우).하지만 비슷한 동작에 의존 할 수있는 다른 것이 있습니까?


답변