Linux系統管理之 crond 與 crontab

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. 要在每週二的凌晨三點重啓服務器
  2. 每月的1,10,30號的凌晨五點執行/root/sh/autobackup.sh 自動備份腳本
  3. 每五分鐘向 /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

crontab-e

然後保存退出,查看:

這裏寫圖片描述

此時已經生效,如果需要刪除單條任務,再次編輯刪除單行即可,如果需要都刪除,加參數 -r:

這裏寫圖片描述

2、 crontab 注意事項

一、六個選項都不能爲空,必須填寫,如果不確定可以使用 * 表示任意時間。

二、crontab 定時任務,最小時間是分鐘,最大是月,不能指定多少秒或多少年。

三、在寫時間時,儘量不要把日期和星期寫在一起,都是用天表示單位,容易混亂。

四、定時任務中,最好使用絕對路徑,因爲 進程可能有自己的環境變量。


擴展

如果需要指定用戶執行定時任務,可以在配置文件/etc/crontab中添加內容,需要在上面的格式命令之前加上用戶名。

如果服務器可能出現故障,需要確保定時任務的執行,可以使用服務 anacron,將需要按照日、周、月執行的的腳本放到目錄/etc/cron.{daily | weekly | monthly}中。在配置文件/ect/anacrontab中可以配置,執行時間的範圍,以及強制延時時間。

發佈了127 篇原創文章 · 獲贊 199 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章