Linux系統下使用crontab添加計划任務的方法




在服務器中添加定期執行的任務,在很多情況下是非常必要的。比如,每天清理一次/tmp目錄下的文件;沒幾分鍾檢查某一守護進程是否正常等等。這樣計划任務就顯得尤為方便。下面將介紹如何在Linux系統中添加計划任務。

一、什么是Crontab
簡而言之,Crontab提供了允許給定的任務以一定的間隔在后台運行的機制。需要注意的是,並不是所有的系統都支持Crontab,需要和系統管理員聯系,但是至少大部分應該是支持的。

二、Crontab如何工作
一個Cron計划就是一個文本文件,系統以及每一個用戶都有他們自己的Cron計划。
對於用戶的Cron計划,都會存放到/var/spool/cron/crontabs目錄中,但是系統不允許用戶直接對該文件進行修改,而是必須通過以下命令修改:

crontab -e

使用命令crontab -u user -e命令編輯用戶user的cron(c)作業。用戶通過編輯文件來增加或修改任何作業請求。
有的系統可以允許用戶選擇使用哪種文本編輯器對該文件進行修改,也有的只允許默認使用vi編輯器。
cron計划文件中的每一行只可能是以下三種中的任意一種:注釋(以#開頭)、空行和任務。
每一條計划任務至少包含六個部分,每一個部分之間以一個(必須是一個,不多不少)空格隔開,但是最后一個部分中允許包含空格。
前五個部分規定了該任務運行的時間。

需要注意的是,這個時間是采用了系統時間,而不是太平洋標准時間

每一個部分的意義如下:

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)

前五個部分的語法參考下邊的例子,最后一個部分時間到達的時候要執行的命令。

crontab的用戶手冊中推薦每一個命令使用絕對路徑,例如調用rm命令時寫作:/bin/rm,這是為了防止由於每一個用戶的PATH環境變量不同而導致命令無法找到的錯誤

三、一些例子
(1) 手冊中的例子

# 在每天的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 * * * *".
四、系統的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 )
#

五、使設置生效
設置完成后,重啟cron即可使設置的計划任務定時執行了,重啟命令如下:

service crond restart
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM