Skip to content

[ubuntu] crontab 用法 與 rsync 定時備份資料庫與系統設定等檔案

Published: at 08:40 AM (5 min read)

在 ubuntu 中,我們若需要建立定時的排程工作時(如:定時備份),可以使用 crontab 加入例行性排程,系統將會會定時執行相對應的工作。


在 ubuntu 中,決定使用者是否可以編輯自己 cron job 的設定檔為

接下來,介紹一下如何使用 crontab

crontab

-u [username] :只有 root 可以使用這個參數,可以新增或刪除其他使用的 cron job

-e:編輯自己的 cron job

-l:列出目前的 corntab

-r:移除目前所有的 cron job


來看看如何編輯自己的 cron job, crontab -e

#  m(分鐘) h(小時)  dom(日)  mon(月)  dow(周)   command(指令)      0-59      0-23        1-31       1-12        0-7         [要執行的指令]

*:任何時候 ,:多個時段 -:表示一個時間範圍 /n:每隔 n 個單位間隔

接下來就由例子來看吧

#  m(分鐘) h(小時)  dom(日)  mon(月)  dow(周)   command(指令)          59         23         1             5            *            bash test.sh

#  m(分鐘) h(小時)  dom(日)  mon(月)  dow(周)   command(指令)          59         23         *             *            6,7          bash holiday.sh

#  m(分鐘) h(小時)  dom(日)  mon(月)  dow(周)   command(指令)          0           8          *              *            1-5          bash holiday.sh

#  m(分鐘) h(小時)  dom(日)  mon(月)  dow(周)   command(指令)          /5         *            *              *             *            bash craw.sh

看過以上例子後,應該大概知道用法如何

原則上,每個使用者的 cron job,都會被放至 /var/spool/cron/username

而 cron job 所執行的 log 檔則是在 /var/log/cron

若是需要用 root 執行的 cron job 則放在 /etc/crontab


接下來,我們來用之前介紹過的 rsync 搭配 crontab,定時備份我們的資料與資料庫

在這之前,由於我底下的實作為遠端伺服器備份,因此必須先設定不須密碼登入的ssh

首先我們必須先編輯一個 shell script,backup.sh

[bash] #!/bin/bash # mysql 資料庫備份為 mysql.sql mysqldump -u [user] -p[password] —all-databases > mysql.sql # 伺服器設定檔、網頁..等備份為 backup.tar.gz tar -zcvf backup.tar.gz /etc /var/www /home /root mysql.sql # 透過 ssh 將檔案備份至遠端伺服器 backup 資料夾 rsync -av -e ssh backup.tar.gz [user]@[遠端host]:~/backup [/bash]

接下來,我們利用 crontab 將備份工作列入系統例行性排程(/etc/crontab)

[code] # 每個月的一號早上六點執行備份的 shell script m h dom mon dow user   command 0   6     1    *     *     root    bash backup.sh [/code]

這樣就可以做系統的定時備份囉!

參考資料:

http://linux.vbird.org/linux_basic/0430cron.php