저는 스크립팅이 처음이고 2개의 파일을 읽고 명령을 실행하고 로그 파일을 출력하는 스크립트를 만들었습니다.
나는 이 스크립트를 데몬처럼 실행하고 해당 파일에서 이러한 명령을 다시 실행하기 위해 이 두 파일의 변경을 기다리기를 원합니다.
일부 inotify가 사용된다는 것은 알고 있지만 이를 사용하는 방법과 스크립트가 원하는 방식으로 작동하도록 루프를 어디에 배치해야 하는지 모르겠습니다. 즉:
- 사용자가 처음으로 스크립트를 실행할 때
- 스크립트는 이러한 파일을 읽고 출력 로그를 생성합니다.
- 이 두 로그 파일이 변경될 때까지(일부 행이 추가됨) 스크립트는 "휴면"(데몬화)합니다.
- 이 파일에 대해 동일한 스크립트를 다시 실행하십시오.
- 다시 잠을 자고 이 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
당신이 사용할 수있는incron
inotify 이벤트를 듣습니다. 패키지는 데비안(우분투,...)과 같은 배포판 및 기타 배포판에서 사용할 수 있습니다.