inotifywait 새 디렉터리가 감지되지 않았습니다.

inotifywait 새 디렉터리가 감지되지 않았습니다.

다음 스크립트는 TARGET 디렉터리의 close_write 이벤트를 모니터링하고 파일에 대해 특정 작업을 수행합니다.

#!/bin/bash

TARGET=/home/*/ftp/files

inotifywait -m -r -e close_write $TARGET |
        while read directory action file
        do
                if [[ "$file" =~ .*jpg$ ]] || [[ "$file" =~ .*mp4$ ]]
                then
                        # do sth with the file
                fi
        done

이제 /home/sammy/ftp/fileseg 및 하위 파일의 close_write 이벤트를 올바르게 모니터링하고 있습니다 /home/neo/ftp/files.

내가 직면한 문제는 Mike와 같은 새 사용자가 생성되면 시계가 더 이상 작동하지 않는 것 같아서 스크립트를 다시 실행해야 한다는 것입니다.알다새로운 사용자의 경로에 대해서는 nohup 프로세스를 종료하고 다시 실행해야 합니다.

새로 생성된 디렉터리에서 inotifywait에 대해 알아볼 수 있는 방법이 있나요?

답변1

-r모니터링 중인 디렉터리 아래에 생성된 새 디렉터리를 자동으로 찾습니다 . 하지만 여기서는 경로 등을 /home/sammy/ftp/files가져 오고 그 아래에 있지 않으므로 감지되지 않습니다. (셸은 실행하기 전에 glob을 확장한다는 점을 기억하세요 .)/home/neo/ftp/files/home/mike/home/*/ftp/filesinotifywait

원칙적으로 전체 내용을 시청 /home하고 거기에 없는 콘텐츠는 수동으로 무시할 수 있습니다 /home/*/ftp/files. 그러나 이는 많은 감시를 생성하고 원치 않는 이벤트를 많이 생성합니다.

더 나은 아이디어는 /home디렉터리 외에 추가로 모니터링 /home/*/ftp/files하고 새 하위 디렉터리가 추가되면 모니터링을 다시 시작하는 것입니다 /home. 새로운 사용자가 항상 ftp/files즉시 디렉토리를 생성하는 것은 그리 나쁘지 않습니다. 하지만 새 디렉토리가 나타날 때까지 명시적으로 기다려야 할 수도 있습니다 . 그러면 새 디렉토리를 만들기 전에 스크립트 재설정 경쟁에 빠져서 놓칠 일이 ftp/files없습니다 .inotifywaitftp/files

(다시 시작하면 inotifywait새 파일을 생성할 수 있는 창이 생성되지만 스크립트는 이를 잃게 됩니다. inotify를 직접 지원하는 일부 프로그래밍 언어를 사용하는 것이 더 안전할 수 있습니다.)

/home/$user/files/ftp완전히 다른 접근 방식은 관련 콘텐츠가 더 이상 위치하지 않도록 디렉토리 구조를 변경하는 것입니다 /srv/ftp/$user. 그런 다음 시계를 추가하기만 하면 /srv/ftp문제 없이 자동으로 새로운 사용자를 유치할 수 있습니다.

관련 정보