본문 바로가기
Linux

[Linux] 쉘스크립트로 실시간 파일 감시 시스템 구성

by 띵앤띵 2025. 4. 29.
728x90

✅ 쉘스크립트로 실시간 파일 감시 시스템 구성하기

안녕하세요, 띵앤띵입니다! 😊
오늘은 리눅스에서 쉘 스크립트를 이용해 특정 디렉토리를 실시간 감시하고, 파일이 생성되면 자동으로 원하는 명령어를 실행하는 방법을 소개할게요.

요즘 같이 자동화가 중요한 시대에, 손수 감시하지 않고도 스크립트 하나로 편리하게 처리할 수 있다면 정말 꿀이겠죠? 🍯

🔧 사전 준비: SSH 접속 후 inotify-tools 설치

먼저, 감시를 위한 필수 패키지인 inotify-tools를 설치해야 해요.
SSH 접속 후 아래 명령어를 입력해주세요.

sudo apt update
sudo apt install inotify-tools

inotifywait 명령어를 사용할 수 있게 됩니다. 👍


📝 감시용 쉘 스크립트 예제

아래는 실시간 감시를 위한 기본 스크립트입니다.
(※ 실제 사용시 디렉토리 경로는 {WATCH_DIR}, 명령어는 {DETECTION_CMD}로 치환하세요)

#!/bin/bash

WATCH_DIR="/root/keti_fall_down_detection_v4/data"
DETECTION_CMD="docker exec fall_down_detection python3 main.pyc /root/app/data /root/app/output"

echo "[시작] $WATCH_DIR 디렉토리 감시 중... (jpg/jpeg && 0바이트 초과 파일만)"

inotifywait -m -r -e close_write,move --format '%w%f' "$WATCH_DIR" |
while read FILE
do
  if [[ "$FILE" == *.jpg || "$FILE" == *.jpeg ]]; then
    FILE_SIZE=$(stat -c%s "$FILE" 2>/dev/null)

    if [[ $? -eq 0 && "$FILE_SIZE" -gt 0 ]]; then
      echo "[감지됨] $FILE (크기: ${FILE_SIZE}바이트)"
      echo "[실행] 위험감지 서비스 트리거 중..."
      $DETECTION_CMD
    else
      echo "[무시] $FILE (파일 크기 0 또는 존재하지 않음)"
    fi
  else
    echo "[무시] $FILE (jpg/jpeg 파일 아님)"
  fi
done

💡 사용법 정리

1. 스크립트 저장 및 실행 권한 부여

chmod 777 watch_data_dir.sh

2. 스크립트 실행

./watch_data_dir.sh

3. 백그라운드 실행하기

nohup ./watch_data_dir.sh > watch.log 2>&1 &

4. systemd 서비스로 등록하기

sudo vi /etc/systemd/system/watch_data_dir.service

아래 내용을 입력합니다:

[Unit]
Description=Watch {WATCH_DIR} directory and trigger fall detection
After=network.target docker.service
Requires=docker.service

[Service]
Type=simple
ExecStart={WATCH_SCRIPT_PATH}
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

{WATCH_SCRIPT_PATH}는 스크립트 저장 위치로 수정해주세요!


🚀 systemd 서비스 명령어 모음

  • 데몬 리로드
sudo systemctl daemon-reload
  • 서비스 등록 및 활성화
sudo systemctl enable watch_data_dir.service
  • 서비스 시작
sudo systemctl start watch_data_dir.service
  • 서비스 상태 확인
sudo systemctl status watch_data_dir.service
  • 서비스 로그 확인
sudo journalctl -u watch_data_dir.service -f

✨ 마치며

간단한 쉘 스크립트 하나로 실시간 감시부터 자동화까지 완료할 수 있다니, 정말 편리하지 않나요?
특히 dockerAI 추론 서버, 데이터 수집 파이프라인 구축할 때 이런 기술을 활용하면 시간과 노력을 크게 줄일 수 있어요. 🙌

다음에는 이 스크립트를 좀 더 고급스럽게, Slack 알림이나 에러 핸들링 추가 버전도 소개해드릴게요!

읽어주셔서 감사합니다 💙
궁금한 점은 댓글로 남겨주세요!


반응형

댓글