/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
명령은 다음과 같이 수정할 수 있습니다.
[...]
-s command
한 번에 하나의 인스턴스만command
실행됩니다.command
이전 인스턴스가 완료될 때까지 다른 인스턴스가 예약되지 않습니다.