在 ubuntu 中,我們若需要建立定時的排程工作時(如:定時備份),可以使用 crontab 加入例行性排程,系統將會會定時執行相對應的工作。
在 ubuntu 中,決定使用者是否可以編輯自己 cron job 的設定檔為
- /etc/cron.allow 在此檔案中的使用者帳號將可編輯 cron job,若不在其中則無法使用。
- /etc/cron.deny 在此檔案中的使用者帳號將不可使用 crontab,若不在其中則可以使用。 例: [code] // one line, one account name user1 user2 [/code] PS. 預設會以 cron.allow 為優先。因此,通常只會選擇其中之一( cron.allow 或 cron.deny )做限制
接下來,介紹一下如何使用 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 個單位間隔
接下來就由例子來看吧
- 每年的5月1日23:59,執行 test.sh
# m(分鐘) h(小時) dom(日) mon(月) dow(周) command(指令) 59 23 1 5 * bash test.sh
- 每週六與週日的23:59,執行 holiday.sh
# m(分鐘) h(小時) dom(日) mon(月) dow(周) command(指令) 59 23 * * 6,7 bash holiday.sh
- 每週一至週五的8:00,執行 morning.sh
# m(分鐘) h(小時) dom(日) mon(月) dow(周) command(指令) 0 8 * * 1-5 bash holiday.sh
- 每五分鐘執行一次 craw.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]
這樣就可以做系統的定時備份囉!
參考資料: