>

파일 변경 사항이 있는지 디렉터리 트리를 모니터링해야합니다. 변경시 백업 스크립트 (기본적으로 git commit이지만 데이터베이스 덤프 포함)를 트리거하고 싶습니다.

커밋 수를 줄이기 위해 백업 스크립트를 실행하기 전에 n 초 동안 기다리려고하는 비교적 짧은 시간 내에 더 많은 변경이있을 것으로 예상됩니다.

내 요구 사항을 요약하려면 :

  • 파일 변경을 위해 재귀 적으로 디렉토리를 모니터링
  • 백업 실행 전 추가 변경을위한 유예 기간 (n 초)
  • 백업 실행 중에 발생하는 모든 변경 사항을 잃어 버려서는 안됩니다
<시간>

자바 스크립트를 사용하면 파일 변경시 다음과 같은 작업을 수행합니다.

if (timeout) {
  clearTimeout(timeout);
}
timeout = setTimeout(callback, 60000);

bash 스크립트를 사용하여 이러한 동작을 복제하는 방법이 명확하지 않습니다. 내 현재 접근 방식은 다음과 같습니다.

watch.sh :

#!/bin/bash
inotifywait \
  --recursive \
  --monitor \
  --event attrib,modify,move,create,delete \
  --format %e \
  /usr/src/app/html/themes/ |
while read events; do
  flock -n /var/run/backup-watch.lockfile -c /usr/src/scripts/watch-backup.sh
done

watch-backup.sh :

#!/bin/bash
# wait for more changes to happen
sleep 60
# run script
/usr/src/scripts/commit-changes.sh

<시간>

대기중인 구성 요소가 있지만 commit-changes.sh 스크립트가 실행되는 동안 발생하는 모든 변경 사항을 무시합니다.

대안 :

  • 노드 js 스크립트 사용을 고려했지만 node fs watch 명령은 재귀 디렉토리 감시를 허용하지 않으므로 옵션이 아닙니다.
  • Cron이 대안이 될 수 있지만 일정대로 실행하는 대신 변경 사항을 확인하고 싶습니다. 백업 스크립트는 db-dump가 포함되어 매번 새로운 커밋을 생성합니다. 다른 변경 사항이 있는지 확인하여 백업을 더 복잡하게 만들 수 있지만 db-dump를 간단하게 유지하고 싶습니다.
  • 이전 openssh - ssh-copy-id user @ host가 비밀번호를 묻는 메시지를 표시하지만 허용되지 않습니다
  • 다음 fedora - 로그인 화면에 입력이없고 시스템에 들어갈 수 없습니다