[Ubuntu] 리눅스 파일 변경 실시간 감지하기

2022. 12. 8. 12:58·Server/Ubuntu
728x90
반응형

서버 환경은 Ubuntu...

우리는 inotify-tools를 이용하여, 파일의 생성 감지하여 빌드 및 배포하는 스크립트를 예시로 작성할 것이다.

 

우선...

sudo apt-get install inotify-tools

 

위 명령어로 inotify-tools 를 설치한다.

우리가 사용할 inotifywait가 포함되어있다.

 

touch inotifywait.sh

예제로 inotifywait.sh 파일을 생성한다.

 

vi inotifywait.sh

vi 에디터로 문서를 편집한다.

 

inotifywait.sh

 

#!/bin/sh

MONITOR_PATH={보안으로 인해 가림}

inotifywait -m -e create -r "$MONITOR_PATH" |
while read dirname eventlist filename
do
    echo ${dirname} ${filename}
    sleep 3s
    if [ $filename = "build.zip" ]; then
        cd build
        rm -rf *
        cd ..
        tar -zxvf ${MONITOR_PATH}/build.zip "build"
        rm -rf ${MONITOR_PATH}/build.zip
        pm2 start pm2.config.cjs
    fi
done

 

위 내용처럼 작성하였는데..

 

소스 내용을 설명해보자면...

MONITOR_PATH 변수를 선언하여 값을 초기화하고..

해당 경로에 파일 생성 이벤트가 발생하면...

디렉토리명과 파일명이 출력된다..

그리고 만약, 생성된 파일명이 build.zip이라면...

build 디렉토리 내부 내용을 지우고... 

다시, build 내용에 새롭게 zip 파일의 내용을 풀고 

build.zip 파일을 지우고

pm2 모듈로 해당 내용을 실행시킨다 

 

위 내용은 배포 등의 스크립트가 추가된 것이고...

 

#!/bin/sh

MONITOR_PATH={보안으로 인해 가림}

inotifywait -m -e create -r "$MONITOR_PATH" |
while read dirname eventlist filename
do
    echo ${dirname} ${filename}
done

파일 변경 감지 내용을 바탕으로 사용하려면 위처럼 작성하여야한다...

위 소스는 파일 생성 이벤트를 감지하기 때문에 옵션과 이벤트를 수정해서 사용하여야한다.

 

각 이벤트 및 옵션 들을 아래에서 참고할 수 있도록 리스트화 해놓음...

 

[Options]
-h|--help
> 도움말을 보여줍니다.

@<file>
> 감시에서 지정된 파일을 제외합니다.

--exclude <pattern>
> 확장 정규식 <pattern>과 일치하는 파일의 모든 이벤트를 제외합니다.

--excludei <pattern>
> --exclude와 같지만 대소 문자를 구분하지 않습니다.

 -m|--monitor
> 이벤트를 영원히 경청하십시오. 이 옵션이 없으면 inotifywait는 하나의 이벤트가 수신 된 후 종료됩니다.

-d|--daemon
> --outfile로 지정된 파일에 이벤트 로깅 이벤트를 백그라운드에서 실행한다는 점을 제외하면 --monitor와 동일합니다. --syslog를 의미합니다.

-r|--recursive
> 디렉토리를 재귀 적으로 감시합니다. 

--fromfile <file> 
> <file> 또는 stdin의 경우`- '에서 감시 할 파일을 읽습니다.

-o|--outfile <file>
> stdout이 아닌 <file>에 이벤트를 인쇄하십시오.

-s|--syslog
> stderr 대신 syslog에 오류를 보냅니다.

-q|--quiet
> 더 적게 인쇄합니다 (인쇄 이벤트 만).

-qq
> 아무것도 인쇄하지 않습니다 (이벤트도 아님).

--format <fmt>
> 지정된 printf와 유사한 형식 문자열을 사용하여 인쇄합니다. 자세한 내용은 man 페이지를 참조하십시오.

--timefmt <fmt>
> --format 문자열에서 % T와 함께 사용하기위한 strftime 호환 형식 문자열입니다.

-c|--csv
> CSV 형식으로 이벤트를 인쇄합니다.

-t|--timeout <seconds>
> 단일 이벤트를 수신 할 때 <seconds> 초 동안 이벤트를 기다린 후 시간이 초과됩니다. <seconds>가 0이면 inotifywait가 시간 초과되지 않습니다.

-e|--event <event1> [ -e|--event <event2> ... ]
> 특정 이벤트를 수신합니다. 생략하면 모든 이벤트가 수신됩니다.

 

[이벤트 설명]
access
> 파일 또는 디렉토리 내용을 읽었습니다
modify
> 파일 또는 디렉토리 내용이 기록되었습니다.
attrib
> 파일 또는 디렉토리 내용이 기록되었습니다.
close_write
> 쓰기 가능 모드로 열린 후 파일 또는 디렉토리가 닫힘
close_nowrite
> 읽기 전용 모드로 열린 후 파일 또는 디렉토리가 닫힘
close
> 읽기 / 쓰기 모드에 관계없이 파일 또는 디렉터리가 닫힘
open
> 열린 파일 또는 디렉토리
moved_to
> 감시 된 디렉토리로 이동 된 파일 또는 디렉토리
moved_from
> 감시 된 디렉토리에서 이동 된 파일 또는 디렉토리
move
> 감시 된 디렉토리로 (부터) 이동 된 파일 또는 디렉토리
create
> 감시 된 디렉토리 내에 생성 된 파일 또는 디렉토리
delete
> 감시 디렉토리 내에서 삭제 된 파일 또는 디렉토리
delete_self
> 파일 또는 디렉토리가 삭제되었습니다.
unmount
> 마운트 해제 된 파일 또는 디렉토리를 포함하는 파일 시스템

 

참고: https://hmjkor.tistory.com/502

 

728x90
반응형

'Server > Ubuntu' 카테고리의 다른 글

[ubuntu] 방화벽(firewalld) 설치 및 설정  (0) 2022.03.29
[JBOSS] JBOSS Handler(핸들러) 이용하기  (0) 2018.07.17
[ubuntu] ubuntu에서 nfs 서버 구동 및 설정하기  (0) 2018.07.11
[Ubuntu] 우분투 스왑메모리 설정.  (0) 2018.06.14
'Server/Ubuntu' 카테고리의 다른 글
  • [ubuntu] 방화벽(firewalld) 설치 및 설정
  • [JBOSS] JBOSS Handler(핸들러) 이용하기
  • [ubuntu] ubuntu에서 nfs 서버 구동 및 설정하기
  • [Ubuntu] 우분투 스왑메모리 설정.
밍글링글링
밍글링글링
mingling - 밍글링, 밍글밍글링. 코드와 어우러지다. IT/ 프로그래밍/소스
    반응형
    250x250
  • 밍글링글링
    mingling
    밍글링글링
  • 전체
    오늘
    어제
    • 밍글링글링 (407) N
      • Flutter (2)
      • 일상생활 (8)
        • 리뷰 (1)
        • 생활정보 (4)
        • 맛집 (0)
        • 여행 (0)
        • 모든정보 (3)
      • JAVA (126)
        • 개념 (6)
        • 예제 (115)
        • Exception (2)
      • C (1)
        • C (1)
        • C++ (0)
        • C# (0)
      • JS (29)
        • JavaScript (18)
        • JQuery (5)
        • AJax (0)
        • NODE.JS (6)
        • Angular.JS 2.0 (0)
      • WEB (87)
        • HTML (6)
        • CSS (61)
        • JSP (20)
        • JSTL (0)
      • FrameWork (8)
        • Spring (8)
        • BootStrap (0)
        • MyBATIS (0)
        • JUnit (0)
      • 외부 라이브러리 (5)
      • 공유 소스 관리 (5)
        • Git (5)
        • SVN (0)
      • 빅데이터 프로그래밍 (37)
        • Python (37)
        • R Programming (0)
      • DB (7)
        • ORACLE (0)
        • MySql (6)
      • Development Tools (7)
        • StarUML (0)
        • eXERD (0)
        • Eclipse (4)
      • SKILL (6)
        • Migration (0)
        • Security (6)
      • MicroSoft (0)
        • Excel (0)
        • Word (0)
      • Android (0)
      • Server (21)
        • Ubuntu (5)
        • Linux (15)
      • IOS (0)
      • XML (0)
      • 미디어 (0)
      • 공지사항 (3)
      • NETWORK (1)
      • 게임 (4)
        • 피파 (1)
        • 리니지M (0)
        • 배틀그라운드 (1)
        • 듀랑고 (2)
      • 세상 이슈 (6)
      • 일렉트론 (0)
      • 대회 소식 (4)
      • 업무 (2)
      • Express, Vue (6)
      • docker (11)
      • svelte (3)
      • 블록체인 (1)
      • IT (10) N
      • Rust (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    rust linux
    ubuntu
    ssl 인증서 발급
    vue 설치
    프런트엔드
    React Compiler
    vue cli
    css table
    docker
    AI 코딩 에이전트
    css list
    자바 배열
    자바 클래스
    Extension Bisect
    proxy pass
    Rust lang
    css perspective
    API 설계
    css float
    java casting
    css tb
    Node
    gitlab 설치
    nginx ssl 설정
    css transition
    vscode
    Java Array
    jsp include
    오류
    mysql db
    SSL 인증서
    자바 for문
    servlet class
    러스트
    nginx
    클론코딩
    svelte
    nginx ssl 적용
    브라우저 자동화
    자바 생성자
    자바 객체 지향
    VS Code 팁
    에디터 팁
    리눅스 설치
    css block
    jsp parameter
    spring java
    티스토리 자동화
    자바 exception
    lang rust
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
밍글링글링
[Ubuntu] 리눅스 파일 변경 실시간 감지하기
상단으로

티스토리툴바