파일 변경 사항이 있는지 디렉터리 트리를 모니터링해야 합니다. 변경 시 백업 스크립트(기본적으로 git 커밋이지만 데이터베이스 덤프 포함)를 트리거하고 싶습니다.
상대적으로 짧은 시간 내에 더 많은 변경 사항이 있을 것으로 예상하므로 커밋 수를 줄이기 위해 백업 스크립트를 실행하기 전에 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
watchbackup.sh:
#!/bin/bash
# wait for more changes to happen
sleep 60
# run script
/usr/src/scripts/commit-changes.sh
대기 구성 요소가 있지만 commit-changes.sh 스크립트가 실행되는 동안 발생하는 모든 변경 사항을 무시합니다.
대안:
- node js 스크립트 사용을 고려했지만 node fs watch 명령은 재귀 디렉터리 모니터링을 허용하지 않으므로 옵션이 아닙니다.
- Cron이 대안일 수도 있지만 계획대로 실행하기보다는 변경 사항을 지켜보는 편이 낫습니다. db-dump는 백업 스크립트의 일부이므로 백업 스크립트는 매번 새로운 커밋을 생성합니다. 다른 변경 사항이 있는지 확인하여 백업을 더 복잡하게 만들 수 있지만 데이터베이스 덤프를 사용하면 백업을 단순하게 유지하고 싶습니다.
답변1
보세요왼쪽 동기화
Lsyncd는 로컬 디렉터리 트리 이벤트 모니터 인터페이스(inotify 또는 fsevents)를 모니터링합니다. 몇 초 동안 이벤트를 집계하고 결합한 다음 프로세스를 생성하여 변경 사항을 동기화합니다.