2개 파일의 변경 사항을 기다리면서 스크립트를 데몬처럼 실행하려면 어떻게 해야 합니까?

2개 파일의 변경 사항을 기다리면서 스크립트를 데몬처럼 실행하려면 어떻게 해야 합니까?

저는 스크립팅이 처음이고 2개의 파일을 읽고 명령을 실행하고 로그 파일을 출력하는 스크립트를 만들었습니다.

나는 이 스크립트를 데몬처럼 실행하고 해당 파일에서 이러한 명령을 다시 실행하기 위해 이 두 파일의 변경을 기다리기를 원합니다.

일부 inotify가 사용된다는 것은 알고 있지만 이를 사용하는 방법과 스크립트가 원하는 방식으로 작동하도록 루프를 어디에 배치해야 하는지 모르겠습니다. 즉:

  1. 사용자가 처음으로 스크립트를 실행할 때
  2. 스크립트는 이러한 파일을 읽고 출력 로그를 생성합니다.
  3. 이 두 로그 파일이 변경될 때까지(일부 행이 추가됨) 스크립트는 "휴면"(데몬화)합니다.
  4. 이 파일에 대해 동일한 스크립트를 다시 실행하십시오.
  5. 다시 잠을 자고 이 2개 파일의 변경 사항을 기다립니다.

답변1

오래된 소프트웨어를 모니터링해야 하는데 로깅 옵션이 충분하지 않습니다. 이는 정확히 원하는 것이 아니지만 도움이 될 수 있습니다.

  • 초당 2개의 파일 비교( ref.cfg합계)cur.cfg
  • cfg.log차이점이 발견되면 파일에 기록
  • 변경 사항이 감지되면 파일을 비교하십시오.
  • 날짜 접미사가 포함된 파일 백업

watch_cfg.sh:

#!/bin/bash

cfg_reference="/tmp/ref.cfg"
cfg_current="/tmp/cur.cfg"

while true; 
do 
  cfg1=$(cat $cfg_reference)
  cfg2=$(cat $cfg_current)
  date_current="$(date +"%F_%T")"
  diff_detected=false
  test "$cfg1" = "$cfg2" || diff_detected=true
  if [ "$diff_detected" = true ]; then
    printf "$date_current [cfg] diff detected\n" >> cfg.log
    diff $cfg_reference $ecfg_current > "./cfg_diff/cur.cfg_${date_current}"
    cp -a "$cfg_reference" "./cfg_old/cur.cfg_before_${date_current}"
    cp -a "$cfg_current" "$cfg_reference"
  fi
  sleep 1
done

다음 명령을 실행하십시오.

chmod +x watch_cfg.sh
nohup ./watch_cfg.sh  > /dev/null 2>&1 &

그러면 현재 세션에서 프로세스가 분리되어 백그라운드로 전송됩니다.

답변2

이 내용이 도움이 될 것 같아서 "답변"으로 게시합니다(댓글을 남길 수 있다면 그렇게 하겠습니다).

http://www.nongnu.org/fileschanged/

예제 4는 당신이 하고 싶은 일에 해당할 수 있습니다. 나는 오랫동안 그것을 사용해 왔으며 좋은 결과를 얻었습니다.

./fileschanged -r dir | while read file ; do
  if [ "${file}" == "x" ] ; then
    handle_file_x_script "${file}"
  else if [ "${file}" == "y" ] ; then
    handle_file_y_script "${file}"
  fi
done

답변3

당신이 사용할 수있는incroninotify 이벤트를 듣습니다. 패키지는 데비안(우분투,...)과 같은 배포판 및 기타 배포판에서 사용할 수 있습니다.

관련 정보