一:crontab -e
# 此時會進入 vi 的編輯畫面讓您編輯工作!注意到,每項工作都是一行。
#分 時 日 月 周
<==============任務的完整命令行
* * * * * /home/blue/do/rsyncfile.sh
默認情況下,任何使用者只要不被列入 /etc/cron.deny 當中,那么他就可以直接下達『 crontab -e』去編輯自己的例行性命令了!整個過程就如同上面提到的,會進入 vi 的編輯畫面, 然后以一個工作一行來編輯,編輯完畢之后輸入『 :wq』儲存后離開 vi 就可以了!
假如我們需要修改為每5分鍾運行數據同步的腳本,那么同樣使用 crontab -e 進入編輯:
*/5 * * * * /home/blue/do/rsyncfile.sh
假如服務器出了問題,有一天的數據沒有同步,於是我們就需要補數據了,假設這個補數據的腳本是/home/blue/do/rsyncfile_day.sh,但是白天是高峰期,晚上用戶不多,是低峰期,我們補數據會占用大量帶寬,尤其是白天,會影響正常業務,所以一般我們可以讓補數據任務在凌晨2點開始跑,那么同樣使用crontab -e 進入編輯:
0 2 1 4 * /home/blue/do/rsyncfile_day.sh
這樣,在4月1號凌晨2點0分就會開始啟動我們的補數據的腳本了。
同步數據,在互聯網公司是再平常不過的任務了,這里大家可以看到crontab的魅力所在了,只需要寫最簡單的業務邏輯,把調度交給crond做,就完成了一個可靠性很高的一項任務了,如果要自己去額外寫這種調度程序,不知道要花多少精力才能做到可靠穩定。
crontab的語法
crontab [-u username] [-l
-e
-r]
選項與參數:
-u :只有 root 才能進行這個任務,亦即幫其他使用者創建/移除 crontab 工作排程;
-e :編輯 crontab 的工作內容
-l :查閱 crontab 的工作內容
-r :移除所有的 crontab 的工作內容,若僅要移除一項,請用 -e 去編輯
查詢使用者目前的 crontab 內容:
crontab -l
*/5 * * * * /home/blue/do/rsyncfile.sh
0 2 1 4 * /home/blue/do/rsyncfile_day.sh
清空使用者目前的 crontab:
crontab -r
crontab -l
no crontab for blue
如果你想刪除當前用戶的某一個crontab任務,那么使用crontab -e進入編輯器,再刪除對應的任務。
crontab的限制
/etc/cron.allow:將可以使用 crontab 的帳號寫入其中,若不在這個文件內的使用者則不可使用crontab;
/etc/cron.deny:將不可以使用 crontab 的帳號寫入其中,若未記錄到這個文件當中的使用者,就可以使用crontab 。
以優先順序來說, /etc/cron.allow 比 /etc/cron.deny 要優先,而判斷上面,這兩個文件只選擇一個來限制而已,因此,建議你只要保留一個即可, 免得影響自己在配置上面的判斷!一般來說,系統默認是保留/etc/cron.deny ,你可以將不想讓他運行 crontab 的那個使用者寫入 /etc/cron.deny當中,一個帳號一行!
二、& 后台執行命令
當在前台運行某個作業時,終端被該作業占據;而在后台運行作業時,它不會占據終端。可以使用&命令把作業放到后台執行。
如:
30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh&
在后台運行作業時要當心:需要用戶交互的命令不要放在后台執行,因為這樣你的機器就會在那里傻等。
不過,作業在后台運行一樣會將結果輸出到屏幕上,干擾你的工作。如果放在后台運行的作業會產生大量的輸出,最好使用下面的方法把它的輸出重定向到某個文件中:
如:
command >out.file 2>&1 &
在這個例子中,2>&1表示所有的標准輸出和錯誤輸出都將被重定向到一個叫做out.file 的文件中。