周期性計劃任務Cron詳解

概述


cron 是Linux 或者類 Unix 系統的作業調度程序。利用它,我們可以配置某些命令或者腳本,讓命令和腳本在某個設定的時間內周期性地運行。本文主要以描述了 CentOS 6的cron命令的詳細知識。

了解cron組件


cron程序由程序包cronie提供,我們可以通過rpm -qi cronie查看cronie的信息。

wKiom1fdDJCRnDB4AABednY8Wbo104.png

cron 的組件包括:

1.守護進程本身(crond);

    所謂守護進程,即是不間斷運行在后臺的進程,它隨時監聽用戶的請求,并隨時響應并予以執行用戶的作業。crond的最小周期單位是1分鐘/次。

2. 一個用來添加、修改和刪除用戶配置文件的實用程序;

    cron程序主要通過 crontab 命令 管理cron作業。一般來說,cron 配置文件或 cron 作業的列表被稱為 crontab 或 cron 時間表。為了避免混淆,本文將命令和作業分別以 crontab 命令 和crontab 作以區分。

    雖然我們可以直接編輯配置文件,但限于crontab有固定格式,所以不建議用文本編輯器進行直接編輯。而應該使用 crontab 命令進行管理計劃任務。

 

3. 一組系統范圍的配置文件;

    我們可以在三個位置定義與系統相關的 crontab 作業:/etc/crontab、/etc/cron.d 中的任何文件以及特殊目錄 /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 和 /etc/cron.monthly。

  • 主要的系統crontab是/etc/crontab。這個文件有獨特的語法(在下一節中討論),其中定義的每個作業根據它自己的時間表(比如每小時兩次或每天一次)作為指定的用戶運行。使用 /etc/crontab 調度各種管理和維護任務。


  • 可以在 /etc/cron.d 目錄中維護一組 crontab。通過創建crontab,按照邏輯對屬于某一子系統的命令進行分組。/etc/cron.d
    中的文件采用與 /etc/crontab 相同的語法,每個作業按照自己的時間表并作為特定的用戶運行。

  • 還可以把 shell 腳本直接放在
    /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 或 /etc/cron.monthly
    目錄中,實現每小時、每天、每周或每月運行此腳本一次。放在這里的腳本作為超級用戶運行。

4. 一組針對特定用戶的配置文件;

    針對用戶的 crontab 集合通常放在 /var/spool/cron/ 中,通常以用戶名做為文件名存放。同樣的,建議使用 crontab命令 創建
crontab 并提交文件。   

5. 一個簡單的訪問控制設施。

    分別使用訪問控制文件 /etc/cron.allow 和 /etc/cron.deny 允許或拒絕用戶訪問 cron。例如,如果某個用戶的作業可能會破壞系統的正常操作,就可以拒絕他訪問 cron。

crontab作業


crontab 是一個文本文件。它可以包含四種代碼行:空行、注釋、環境變量設置和作業命令。

wKiom1fdO1viUPDDAAA-Rzf0Upc401.png

空行和注釋

文件中的空行和多余的空格被忽略??招泻涂崭裼兄谔岣?crontab 的可讀性,使 crontab 組織有序。

還可以使用注釋對每個作業的時間表和用途加以說明。要想創建注釋,只需在一行的開頭加上一個井號(#)。

環境變量設置

cron 最終使用一個 shell 執行每個命令??梢酝ㄟ^環境變量修改或定制 shell 的行為。

在 crontab 中很容易設置 shell 環境變量。只需輸入 VARIABLE=value,把 VARIABLE 替換為變量名,把 value 替換為一個值。

cron 預定義了4個環境變量:

    • PATH 的默認值是 /sbin:/bin:/usr/sbin:/usr/bin。

    • SHELL 預設置為 /bin/bash。

    • HOME 設置為 crontab 所有者的主目錄,比如 /home/joe。

    • MAILTO 執行結果郵件發送給MAILTO指定的用戶。

要想修改這些默認值或設置任何變量,只需在 crontab 中設置適當的環境變量。

注意:crontab的任務環境PATH與用戶登錄的PATH很多時候不完全相同,所以編寫crontab執行命令或腳本時,建議使用命令的絕對路徑;也可以修改crontab的PATH變量。

作業命令

crontab的作業命令由單行固定格式的文本構成。一般可以分為3個部分:

wKiom1fd7x7AVhufAACRHSLxtBw909.png

  1. 執行頻率,定義周期性時間;以空格分隔的5個字段,分別代表:分鐘,小時,日期,月份,周。

  2. crontab所有者,運行任務的用戶身份;系統級crontab必須有此字段,用戶級(/var/spool/cron/*)的crontab則無需此字段。因此,是否有用戶名是系統 crontab 和用戶 crontab 之間的惟一差異。

  3. 執行命令或腳本。

crontab執行頻率支持多種設置,可以靈活的允許以多種方式運行作業,比如每分鐘或在特定日期的特定時間。

表1. cron 作業執行頻率選項
位置 字段 說明
1 分鐘
0-59
2 小時 0-23 0到23的24小時計時法
3 日期 1-31 與分和小時不同,月中日不是從0開始的。
4 月份 1-12 月份也不是從0開始的。也可以使用月份英文名的前三個字母,比如 jan 或 may。
5 0-7

0和7 都代表星期日。還可以使用英文名稱的前三個字母,比如 sun、mon、tue…

注意

          A.一般定義了具體的月和日后,不建議定義周,例如:* * 1 2 3,表示2月1日并且是周3的每分鐘,符合條件的那一天也許百年不遇;

          B.定義了具體日期和周,則是或關系,例如:* * 1 * 3,表示每個月的1日或者每個月的周三

表2. crontab每個時間字段表示法:

序號 說明
1 N 特定值,給定時間點郵箱取值范圍內的值。(N表示數字)
2 * 給定時間點上有效取值范圍內的所有值,表示為“每…”
3 離散取值
4 連續取值
5 / 在指定時間范圍上,定義步長

我們通過以下示例說明周期表示法:

表3. 示例說明

小時 日期 月份 說明
* * * * * 每分鐘執行
0 1 15 1,3,5,7,9,11 * 在 1、3、5、7、9 和 11 月的 15 日的 1 a.m.  運行命令。在指定列表時,不要在逗號后面加空格。
0-59/15 * * * * 每  15 分鐘運行命令一次。0-59/15等同于*/15
30 * * * wed,fri 星期三和星期五每小時的 30  分時執行命令一次。(在列表中可以使用日和月份的名稱,但是在范圍中不可以)。
0,30 0-5,17-23 * * * 在(0點-5點,  以及 17點-23點之間)整點時和 30 分時運行命令。
0 0 1 1 * 在每年 1 月 1 日0:00執行命令一次。
0 0 * * 0 在每個星期日午夜運行命令。這相當于每周一次。
30 0 10,20,30 * 6 每星期六和每月的 10、20 和 30 日(二月除外)的 00:30  運行命令。

前面提到crond的最小周期單位是1分鐘/次。如果我們需要運行的周期是以秒或更小單位時候,要怎么辦呢?

這里建議方法是:以腳本編寫執行命令,通過循環語句,配合sleep、usleep,達到秒級甚至微秒的周期性任務任務。

crontab命令


crontab命令本質上是調用文本編輯器進行編輯 crontab ,并在修改保存時進行語法格式檢查。

crontab的語法格式

crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]

crontab的常用選項

    -e    編輯用戶的 crontab;
    -l    列出用戶的 crontab;
    -r    刪除用戶的 crontab;

crontab命令使用受權限控制。

crontab權限管理


cront通過/etc/cront.{allow,deny}兩個文件,進行權限管理,控制用戶是否能執行cront任務:

  1. /etc/cront.allow 存在,則/etc/cront.deny不生效,只有文件定義的使用者才能使用 crontab 命令 ,沒有在這個文件中的使用者則不能使用,即使沒有寫在cront.deny 當中;

  2. /etc/cront.allow 不存在, /etc/cront.deny 生效, cront.deny文件定義的使用者不能使用 cront ,而沒有在這個 cront.deny 文件中的使用者則可使用 crontab 命令;

  3. 如果兩個文件都不存在,只有 root 可以使用 crontab 命令

白名單優先管理權限,默認沒有/etc/cron.allow文件,只要創建,僅列出的允許,其他都拒絕

原創文章,作者:昭其,如若轉載,請注明出處:http://www.www58058.com/47423

(4)
昭其昭其
上一篇 2016-09-18
下一篇 2016-09-18

相關推薦

  • 路由以及實驗

    路由 路由(routing)是指分組從源到目的地時,決定端到路徑的網絡范圍的進程。路由工作在OSI模型第三層——網絡層的數據包轉發設備。路由器通過轉發數據包來實現網絡互連。路由器可以支持多種協議,但絕大多數使用的是TCP/IP協議。路由器通常連接兩個或者多個由IP子網或者點到點協議表示的邏輯端口,至少擁有1個物理端口。路由器根據收到數據包中的網絡層地址以及路…

    Linux干貨 2017-05-11
  • Linux哲學思想

    一、一切皆文件     1、將所有資源都抽象成文件形式;     2、幾乎可以通過讀寫文件的形式,操作所有的系統資源。 二、由一個一個的小程序組成,且每一個小程序只做一件事情,并且只做好該件事情即可     1、一個小程序只做好一件事情,即…

    Linux干貨 2016-09-19
  • 搭建discuz服務器

      Discuz是目前比較流行的社區論壇系統,其具有安裝簡便、功能強大的特點,下面以LAMP為基礎平臺來搭建discuz服務器。   一、安裝apache服務   二、安裝php   三、安裝mysql   四、安裝php-mysql   五、啟動mysql服務   六、創建數據庫 &nb…

    Linux干貨 2016-03-18
  • 相識–Varnish

    Varnish與一般服務器軟件類似,分為master(management)進程和child(worker,主要做cache的工作)進程。master進程讀入命令,進行一些初始化,然后fork并監控child進程。child進程分配若干線程進行工作,主要包括一些管理線程和很多woker線程。 VCL:?”域“專有類型的配置語言 VCL有多個狀態引擎,狀態之間…

    Linux干貨 2017-11-13
  • 馬哥教育網絡班22期第一周課程練習1-3天

    1.描述計算機組成及其功能 CPU:  運算器  控制器  寄存器  緩存 存儲器:  RAM(隨機訪問存儲器)  I/O設備:               i:下指令,提供數據 如:鍵鼠     &…

    Linux干貨 2016-08-15

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-20 12:27

    寫的很詳細,特別時間格式,很多時候,定時計劃任務出錯就是時間定義出錯。

欧美性久久久久