백업이 동시에 실행되지 않도록 방지

백업이 동시에 실행되지 않도록 방지

/usr/local/bin/backup매 시간마다 호출하는 스크립트에서 /etc/crontab다음을 사용합니다.동기화외부 서버에 데이터를 복사합니다. 이 모든 것은 한 시간 안에 푸시할 수 있는 것보다 더 많은 새로운 데이터가 있는 경우에도 잘 작동합니다.

지난주에 누군가가 데이터 파티션에 11GB 파일을 복사했는데, 다음날 저는 14개의 rsync 프로그램이 병렬로 실행되고 있다는 사실을 발견했습니다. 각 프로그램에는 대역폭이 없고 아마도 동일한 대용량 파일에서 작업하고 있을 것입니다. 나는 그것들을 모두 죽이고(첫 번째 것을 실행해야 한다는 것을 깨닫기 전에) cron 작업을 중지하고 백업 스크립트를 수동으로 실행했습니다.

rsync를 시작하기 전에 스크립트에 파일을 작성하고 파일이 이미 존재하는지 확인하여 백업이 병렬로 실행되는 것을 방지할 수 있습니다. 더 쉬운 방법이 있나요?

/etc/crontab항목:

5  *  *  *  *   root  /usr/local/bin/backup

답변1

방법은 다양하지만 가장 쉬운 방법은 삽입하는 것이라고 생각합니다.그룹crontab 파일의 명령 앞에:

5  *  *  *  *   root  flock -n /var/lock/backup /usr/local/bin/backup

/var/lock/backup파일은 클러스터에서 사용하는 잠금으로, -n잠금이 이미 존재하는 경우 명령이 즉시 실패합니다.

물론 이는 한 번의 백업에 1시간 1분이 소요된다면 다음 백업은 59분 후에 시작된다는 의미일 수도 있습니다. 이것이 문제라면 -x.

답변2

최근 OpenBSD 설치(OpenBSD 6.7, 2020년 4월 16일 스냅샷 기준)에서는 -s작업 인스턴스가 겹치는 것을 방지하기 위해 계획 자체에서 선택적 옵션을 사용할 수 있습니다.

5 * * * * root -s /usr/local/bin/backup

또는 루트 사용자 자신의 crontab에서

5 * * * * -s /usr/local/bin/backup

~에서OpenBSD crontab(5)매뉴얼:

명령은 다음과 같이 수정할 수 있습니다.

[...]

-s command 한 번에 하나의 인스턴스만 command실행됩니다. command이전 인스턴스가 완료될 때까지 다른 인스턴스가 예약되지 않습니다.

관련 정보