用 Cron 幫網站寫備份腳本吧

Cron 是個好用的 Linux 工具,可以用來定期自動化許多工作,就像 Windows 的排程管理員一樣。透過 Cron,可以輕鬆幫網站寫備份腳本。

用 Cron 幫網站寫備份腳本吧

Cron 是個好用的 Linux 工具,可以用來定期自動化許多工作,就像 Windows 的排程管理員一樣。透過 Cron,可以輕鬆幫網站寫備份腳本。

Cron 可以讓你設定在每天的 12:30 分,或每個星期三的 09:00 等時間,執行不同的腳本、指令或程式。例如你可以設定每天自動清理垃圾檔案、每天自動整理 log 檔案、每兩個月執行一次 Let's Encrypt 的憑證更新 等等。

Cron 不需要安裝,絕大部分的 Linux 電腦都已內建這個東西。

如果你的主機不知怎的沒有的話,依然可以透過 apt-get 來安裝。

Cron 教學

Cron 又稱為 Cronjob,也稱為 Crontab(Cron table),通常以這個指令開始編輯 Cron:

crontab -e

第一次使用可能會叫你設定編輯器,例如你要用 nano 還是 vim 打開 crontab 設定檔。如果你不知道這是什麼意思,就使用 nano 吧。

打開 cron 設定檔後,一開始應該會看到這樣的內容:

# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command

和大部分的設定檔一樣,# 開頭都是註解的意思。從最後一行和範例可以知道,前幾個選項分別是 mhdommondowcommand,依序是 minute(分)、hour(時)、date of month(每月第幾天)、month(月)、day of week(星期幾)和要執行的指令。例如範例的

0 5 * * 1 tar -zcf /var/backups/home.tgz /home/

指的就是任意月(mon)、任意天(dom)的星期一(dow)的 5 點(h)0 分(m),執行 tar -zcf /var/backups/home/tgz /home/ 這個指令。

如果一開始覺得時間很難算,可以試試看 Crontab Guru 這個網站,只要輸入前面五個選項,就會幫你轉成人類可讀時間。

crontab_guru

最後離開文字編輯器,Cron 就會自動生效。

用 Cron 備份主機

Cron 很適合拿來備份主機,例如搭配前面提到的 MongoDB 備份與還原,可以在每個月的一號執行備份,也可以執行日行備份。雖然備份不會影響到資料庫操作,但我習慣在半夜備份:

0 3 1 * * mongodump -d blog -o /home/noob/blog-backup$(date '+%Y-%m-%d')

另外,如果你有一些使用者上傳的檔案需要備份,可以使用 tar 指令來打包。例如如果你要把 /var/www/html/wordpress 都包起來的話,可以使用:

0 3 1 * * tar zcf /home/noob/wordpress$(date '+%Y-%m-%d').tgz /var/www/html/wordpress

來打包成一個 tar.gz 檔案。

本篇文章同步發表在 iT邦幫忙

我們正降低廣告比例以提升閱讀體驗。如果你喜歡這篇文章,不妨按下 Like 按鈕分享到社群,以行動支持我寫更多文章。 當然,你也可以 點此用新臺幣支持我,或 點此透過 BTC、ETH、USDC 等加密貨幣支持我
分享到: