Crontab - 백업 예약

Crontab - 백업 예약

매주 금요일 밤에 백업을 수행하고 싶습니다(아니요, 이것은 전체 백업 루틴이 아니라 일부일 뿐입니다). 매주 금요일 밤의 백업은 4주 후까지 덮어쓰여지지 않습니다. 따라서 기본적으로 1주차, 2주차, 3주차, 4주차 등 4개의 회전 백업이 있습니다.

이제 4주마다 실행하려면 1주차 백업 스크립트가 필요합니다. 하지만 week2의 스크립트가 4주마다 실행되기를 원합니다. 나는 X주/일/시간/무엇이든 매 crontab에 무언가를 실행하도록 지시할 수 있다는 것을 알고 있습니다. 그러나 이 4개의 스크립트 각각이 실제로 서로 다른 주에 실행되도록 설정하려면 어떻게 해야 하며, 4개의 스크립트가 모두 같은 밤에 실행되는 것을 피하고 충실하게 몇 주만 기다리면 됩니다.모두다시 뛰어?

답변1

이렇게 복잡한 백업 루틴을 설계하는 대신 엔터프라이즈급 무료 오픈 소스 소프트웨어인 Bacula를 사용하는 것을 고려해 보세요. Bacula는 매우 유연하며 원하는 거의 모든 방식으로 백업 작업을 자동화할 수 있습니다.

수동 솔루션을 만들 수 있더라도 다음과 같은 많은 단점이 있습니다.

  • 추적 오류는 큰 문제가 될 것입니다.
  • 작업 추적은 골치 아픈 일이 될 것입니다
  • 수동 설정에는 항상 지속적인 모니터링이 필요합니다.

최고의 시스템 관리자는 모든 것을 자동화하고 편안하게 앉아 있는 사람입니다.

답변2

나는 Frank의 대답이 최고라고 생각하지만 설명대로 수행하려면 cronjob을 사용하여 매주 금요일에 백업한 다음 로그 회전을 사용하여 마지막 4개의 복사본을 보관할 수 있습니다. 또는 4주 이상 된 백업을 찾아보세요.

답변3

한 가지 대안: 스크립트에 복잡성을 추가하는 것입니다. 스크립트가 cron보다 이러한 종류의 복잡성을 더 잘 처리할 수 있기 때문입니다. 따라서 (bash를 가정하면):

  • 크론 작업이 매주 금요일에 동일한 스크립트를 실행하도록 하세요.
  • epoch 이후의 모듈로 4주를 제공하도록 스크립트를 수정하세요.

(멍청한 형식 문제, 여기에 더미 텍스트를 넣어야 함)

epochsecs=`date +%s`   # second since epoch

그리고

weeknum=`expr $epochsecs / 86400 / 7 % 4`  # weeks since epoch, modulo 4
  • 해당 번호를 백업 파일 이름의 일부로 사용하십시오.

    백업파일=/경로/to/backup/file.$weeknum

  • 이전 백업 파일을 덮어씁니다.

    rm $backupfile tar czvf $backupfile /bunch/of /directories

또는 날짜가 포함된 파일 이름 접미사를 사용하세요.

backupfile=/path/to/backup/file.`date +%Y-%m-%d`

그런 다음 스크립트에서 28일보다 오래된 백업 파일을 삭제하는 찾기를 실행합니다.

find /path/to/backup -maxdepth 1 -ctime +28 -delete

어쨌든 이런 종류의 복잡성으로 인해 cron에 과도한 부담을 주지 마십시오. 복잡성을 더 잘 처리할 수 있는 스크립트에서 이를 처리하십시오.

답변4

두 가지 대안:

  • 마지막으로 실행된 작업을 추적하고 순서대로 다음 작업을 실행하는 스크립트가 매주 금요일에 실행되도록 예약합니다.

또는:

  • week1이 매월 1~7일에 금요일에만 실행되도록 예약합니다.
  • week2를 매월 8~14일, 금요일에만 실행하도록 예약하세요.
  • ... 등등.
  • 당신은 이것이 당신에게 전혀 도움이 되지 않는다는 것을 알게 될 것입니다.완벽한백업 - 일주일 동안의 백업을 놓칠 때가 있습니다(29/30/31일이 금요일인 경우).

이런 추측이 바로 그 이유다.재미있는모든 것을 스스로 수행하는 것이므로 amanda 또는 bacula와 같은 적절한 백업 도구를 사용하면 더 앞서게 됩니다.프랭크가 제안한다.

관련 정보