cron是任務的意思,tab 表示table。crontab 可以理解爲,任務時間表。 crontab 命令是用來讓計算機替我們執行週期性任務,比如要在每週二的凌晨五點重啓服務器,每天凌晨執行一次備份任務。主要管理以分鐘、小時、日、月、周,爲週期來執行定期任務。守護進程 crond 爲 crontab 命令提供服務。
準備工作
在使用命令之前,首先要確保服務已安裝並啓動。
1、查看 crond 服務是否安裝(守護進程 crond 爲 crontab 命令提供服務)
[root@www time]# chkconfig --list | grep crond
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@www time]#
# 3 和 5 級別是字符界面和圖像界面這兩個 on就表示已經安裝並開機自啓動
2、查看服務是否在運行
[root@www time]# service crond status
crond (pid 2187) is running...
[root@www time]#
顯示服務正在運行,如果沒有運行可以執行service crond restart
重新啓動一下服務。
認識命令
1、crontab 的白名單與黑名單
像 at 命令一樣,在系統的 /etc
目錄下可能會有兩個使用 crontab 的限制文件。
一個可以叫做白名單/etc/cron.allow
,用來記錄那些用戶可以使用 crontab。另一個叫做黑名單 /ect/cron.deny
,用來限制那些不用戶不能使用 crontab黑名單對root 是無效的。
當兩個文件都存在時,以 白名單爲準。當兩個文件都不存在時,只有root可以。一般系統中只有黑名單文件,因爲每個用戶所執行的定時任務都與他自身的用戶權限有關。
2、命令介紹以及命令格式說明
[root@www time]# crontab [選項]
# 選項:
-e :使用 vim 編輯 crontab 定時任務,可添加或刪除,默認爲空,只需按照格式寫入即可
-l :查詢 crontab 任務,以打印的方式
-r :刪除當前用戶所有的 crontab 任務
如果要設定定時任務,在命令行下輸入 crontab -e 進入vim 編輯頁面,默認是空白文件,此時需要按照下面的格式去書寫定時任務:
* * * * * 執行的任務
crontab 任務格式一共有六項,前五個“ * ” 指定時間,分別是分鐘、小時、日、月、周。最後一項是要執行的任務。
3、五個 “*”
的具體含義:
位置 | 意義 | 範圍 |
---|---|---|
第一個 “ * ” | 一小時當中的第幾分鐘。 | 0-59 |
第二個 “ * ” | 一天當中的第幾小時。 | 0-23 |
第三個 “ * ” | 一月當中的第幾天。 | 1-31 |
第四個 “ * ” | 一年當中的第幾月。 | 1-12 |
第無個 “ * ” | 一週當中的星期幾。 | 0-7(0,7都表示星期日) |
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * command to be executed
還有幾個特殊符號需要注意:
符號 | 含義 | 舉例 |
---|---|---|
* | 表示任意時間的意思。 | 比如 “* * * * * 任務” 就代表每分鐘執行一次 |
逗號“,” | 代表不連續的時間。 | 比如 “ 0 1,3 * * * 任務” 就代表每天的1點整,3點整分別都執行一次 |
短槓“-” | 代表連續的時間範圍。 | 比如 “0 2 * * 1-3 任務” 就代表每週一到週三的凌晨2點0分執行任務 |
*/n | 代表每隔多久執行一次。 | 比如 “*/30 * * * * 任務” 就代表每三十分鐘執行一次任務 |
4、crontab 時間的練習:
1、 30 21 * * * 任務
是什麼意思?
答:每天的 21 點 30 執行任務。
2、0 20 * * 1 任務
是什麼意思?
答:每週一的 20 點 00 分執行任務。
3、0 8 1,15,25 * * 任務
是什麼意思?
答:每月1 號 ,15 號,25號的8 點 00 分 執行任務。
4、 */10 3 * * * 任務
是什麼意思?
答:每天凌晨 3 點鐘 每個十分鐘執行一次任務。
5、0 1 1,10 * 2 任務
是什麼意思?
答:每月的週二或每月的 1號 ,10號 的凌晨 1點00分執行任務。這裏並不是每月的1號 ,10號並且還要是週二才執行。
使用及注意事項
1、使用實例
食材已經準備好了,現在開始做菜吧。
要求:
- 要在每週二的凌晨三點重啓服務器
- 每月的1,10,30號的凌晨五點執行
/root/sh/autobackup.sh
自動備份腳本 - 每五分鐘向
/tmp
目錄下的test.log
文件寫入一行 “hello world
演示:
(1)、命令行下輸入 crontab -e
進入編輯頁面
第一個要求:
0 3 * * 2 /sbin/shutdown -r now
第二個要求寫入
0 5 1,10,30 * * /root/sh/autobackup.sh
第三個要求寫入
*/5 * * * * /bin/echo "hello world" >> /tmp/test.log
然後保存退出,查看:
此時已經生效,如果需要刪除單條任務,再次編輯刪除單行即可,如果需要都刪除,加參數 -r:
2、 crontab 注意事項
一、六個選項都不能爲空,必須填寫,如果不確定可以使用 * 表示任意時間。
二、crontab 定時任務,最小時間是分鐘,最大是月,不能指定多少秒或多少年。
三、在寫時間時,儘量不要把日期和星期寫在一起,都是用天表示單位,容易混亂。
四、定時任務中,最好使用絕對路徑,因爲 進程可能有自己的環境變量。
擴展
如果需要指定用戶執行定時任務,可以在配置文件/etc/crontab
中添加內容,需要在上面的格式命令之前加上用戶名。
如果服務器可能出現故障,需要確保定時任務的執行,可以使用服務 anacron,將需要按照日、周、月執行的的腳本放到目錄/etc/cron.{daily | weekly | monthly}
中。在配置文件/ect/anacrontab
中可以配置,執行時間的範圍,以及強制延時時間。