Crontab-安排我的備份

Crontab-安排我的備份

我想每個星期五晚上進行一次備份(不,這不是整個備份例程,只是其中的一部分)。每個週五晚上的備份直到 4 週後才會被覆蓋。因此,本質上,我有四個循環備份:第 1 週、第 2 週、第 3 週和第 4 週。

現在,我需要 week1 備份腳本每 4 週運行一次。但我還希望 week2 的腳本每四個星期運行一次。我知道我可以告訴 crontab 每 X 週/天/小時/無論什麼執行一些事情。但是,我如何設定才能使這四個腳本中的每一個實際上在不同的周運行,如何避免所有 4 個腳本在同一晚運行,然後盡職盡責地等待數週才全部再次運行?

答案1

與其設計如此複雜的備份例程,不如考慮使用 Bacula,它是一款企業級免費開源軟體。 Bacula 非常靈活,它可以以您想要的幾乎所有可能的方式自動執行備份作業。

即使您能夠制定手動解決方案,它也有很多缺點:

  • 追蹤錯誤將是大問題
  • 追蹤工作將是一件令人頭痛的事
  • 手動設定始終需要持續監控

最好的系統管理員是這樣一個人,他可以自動化一切並坐下來放鬆。

答案2

我認為弗蘭克的答案是最好的,但是按照你所描述的那樣,你可以有一個 cronjob 每週五備份,然後使用日誌輪換來保留最後四個副本。或尋找任何超過四個星期的備份。

答案3

一種替代方案:將複雜性放入腳本中,因為它比 cron 能夠更好地處理這種複雜性。所以(假設是 bash):

  • 讓您的 cron 作業每週五執行相同的腳本。
  • 修改您的腳本以給出自紀元以來的周數的模 4:

(愚蠢的格式問題,需要在此處放置虛擬文字)

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

weeknum=`expr $epochsecs / 86400 / 7 % 4`  # weeks since epoch, modulo 4
  • 使用該數字作為備份檔案名稱的一部分。

    backupfile=/path/to/backup/file.$weeknum

  • 覆蓋舊的備份檔案。

    rm $backupfile tar czvf $backupfile /bunch/of /目錄

或者,只需使用帶有日期的檔案名稱後綴:

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

然後在腳本中執行 find 來刪除超過 28 天的備份檔案:

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

無論如何,不要讓 cron 承受如此複雜的負擔。在腳本中處理它,這可能能夠更好地處理複雜性。

答案4

兩種選擇:

  • 安排一個腳本每週五運行,以追蹤上次運行的作業並按順序運行下一個作業。

或者:

  • 將 week1 安排為在該月的第 1-7 天運行,並且僅在周五運行。
  • 將 week2 安排在每月的第 8-14 天運行,並且僅在周五運行。
  • .... 等等。
  • 你會注意到這並不能完全給你一個完美的備份 - 有時您會錯過一週的備份(當 29/30/31 是星期五時)

這種計算方式正是為什麼樂趣因為一切都是自己做,所以透過使用適當的備份工具(例如 amanda 或 bacula),您最終會取得更大的進步弗蘭克建議

相關內容