在服務器中添加按期執行的任務,在不少狀況下是很是必要的。好比,天天清理一次/tmp目錄下的文件;沒幾分鐘檢查某一守護進程是否正常等等。這樣計劃任務就顯得尤其方便。下面將介紹如何在Linux系統中添加計劃任務。html
1、什麼是Crontab
簡而言之,Crontab提供了容許給定的任務以必定的間隔在後臺運行的機制。須要注意的是,並非全部的系統都支持Crontab,須要和系統管理員聯繫,可是至少大部分應該是支持的。服務器
2、Crontab如何工做
一個Cron計劃就是一個文本文件,系統以及每個用戶都有他們本身的Cron計劃。
對於用戶的Cron計劃,都會存放到/var/spool/cron/crontabs目錄中,可是系統不容許用戶直接對該文件進行修改,而是必須經過如下命令修改:dom
crontab -e
使用命令crontab -u user -e命令編輯用戶user的cron(c)做業。用戶經過編輯文件來增長或修改任何做業請求。
有的系統能夠容許用戶選擇使用哪一種文本編輯器對該文件進行修改,也有的只容許默認使用vi編輯器。
cron計劃文件中的每一行只多是如下三種中的任意一種:註釋(以#開頭)、空行和任務。
每一條計劃任務至少包含六個部分,每個部分之間以一個(必須是一個,很少很多)空格隔開,可是最後一個部分中容許包含空格。
前五個部分規定了該任務運行的時間。編輯器
須要注意的是,這個時間是採用了系統時間,而不是太平洋標準時間。ide
每個部分的意義以下:this
field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names, see below)
day of week 0-7 (0 or 7 is Sun, or use names)
前五個部分的語法參考下邊的例子,最後一個部分時間到達的時候要執行的命令。url
crontab的用戶手冊中推薦每個命令使用絕對路徑,例如調用rm命令時寫做:/bin/rm,這是爲了防止因爲每個用戶的PATH環境變量不一樣而致使命令沒法找到的錯誤。spa
3、一些例子
(1) 手冊中的例子rest
# 在天天的00:05AM執行
5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# 在每個月1日的02:15PM執行
15 14 1 * * $HOME/bin/monthly
# 在工做日(週一到週五)的10:00PM執行
0 22 * * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%
# 在0-23小時區間內,每兩小時執行一次,即0點,2點,...,22點,在這些時間以後的23分鐘執行
23 0-23/2 * * * echo "run 23 minutes after midn, 2am, 4am ..., everyday"
# 每週日的04:05AM執行
5 4 * * sun echo "run at 5 after 4 every sunday"
# 在每月的第二個週六的04:00AM執行
0 4 8-15 * 6 test $(date +u) -eq 6 && echo "2nd Saturday"
(2) 預約義任務的前五個部分能夠由如下左邊字符串代替,右邊爲其解釋:
string meaning
------ -------
@reboot Run once, at startup.
@yearly Run once a year, "0 0 1 1 *".
@annually (same as @yearly)
@monthly Run once a month, "0 0 1 * *".
@weekly Run once a week, "0 0 * * 0".
@daily Run once a day, "0 0 * * *".
@midnight (same as @daily)
@hourly Run once an hour, "0 * * * *".
4、系統的Cron計劃
系 統的Cron計劃文件存放在/etc/crontab路徑下。與用戶的crontab文件不一樣,root用戶能夠直接對該文件進行修改,而不用使用 crontab -e命令。除此以外,系統crontab文件中任務的定義也有所不一樣,在前五個部分以後插入了一個「用戶」部分。如下是個人/etc/crontab文 件:
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
5、使設置生效
設置完成後,重啓cron便可使設置的計劃任務定時執行了,重啓命令以下:htm
service crond restart