다음 스크립트는 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/files
eg 및 하위 파일의 close_write 이벤트를 올바르게 모니터링하고 있습니다 /home/neo/ftp/files
.
내가 직면한 문제는 Mike와 같은 새 사용자가 생성되면 시계가 더 이상 작동하지 않는 것 같아서 스크립트를 다시 실행해야 한다는 것입니다.알다새로운 사용자의 경로에 대해서는 nohup 프로세스를 종료하고 다시 실행해야 합니다.
새로 생성된 디렉터리에서 inotifywait에 대해 알아볼 수 있는 방법이 있나요?
답변1
-r
모니터링 중인 디렉터리 아래에 생성된 새 디렉터리를 자동으로 찾습니다 . 하지만 여기서는 경로 등을 /home/sammy/ftp/files
가져 오고 그 아래에 있지 않으므로 감지되지 않습니다. (셸은 실행하기 전에 glob을 확장한다는 점을 기억하세요 .)/home/neo/ftp/files
/home/mike
/home/*/ftp/files
inotifywait
원칙적으로 전체 내용을 시청 /home
하고 거기에 없는 콘텐츠는 수동으로 무시할 수 있습니다 /home/*/ftp/files
. 그러나 이는 많은 감시를 생성하고 원치 않는 이벤트를 많이 생성합니다.
더 나은 아이디어는 /home
디렉터리 외에 추가로 모니터링 /home/*/ftp/files
하고 새 하위 디렉터리가 추가되면 모니터링을 다시 시작하는 것입니다 /home
. 새로운 사용자가 항상 ftp/files
즉시 디렉토리를 생성하는 것은 그리 나쁘지 않습니다. 하지만 새 디렉토리가 나타날 때까지 명시적으로 기다려야 할 수도 있습니다 . 그러면 새 디렉토리를 만들기 전에 스크립트 재설정 경쟁에 빠져서 놓칠 일이 ftp/files
없습니다 .inotifywait
ftp/files
(다시 시작하면 inotifywait
새 파일을 생성할 수 있는 창이 생성되지만 스크립트는 이를 잃게 됩니다. inotify를 직접 지원하는 일부 프로그래밍 언어를 사용하는 것이 더 안전할 수 있습니다.)
/home/$user/files/ftp
완전히 다른 접근 방식은 관련 콘텐츠가 더 이상 위치하지 않도록 디렉토리 구조를 변경하는 것입니다 /srv/ftp/$user
. 그런 다음 시계를 추가하기만 하면 /srv/ftp
문제 없이 자동으로 새로운 사용자를 유치할 수 있습니다.