周期性計劃任務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 12:26
下一篇 2016-09-18 13:37

相關推薦

  • Linux第三周

    一.正則表達式和擴展正則表達式 1.首先有各種工具來對文本進行的查看,分析,統計   cat 命令:查看文本的工具    cat主要有三大功能:1.一次顯示整個文件。$ cat filename2.從鍵盤創建一個文件。$ cat > filename     只能創建新文件,不能編輯已有文件.…

    2017-06-04
  • vim文本編輯器詳解

    啟動vim                             &…

    Linux干貨 2016-08-15
  • 馬哥教育網絡班20期+第2周課程練習

    1、Linux上的文件管理類命令有:cp復制, mv剪切, rm移除 使用方法: cp復制  cp [OPTION]… [-T] SOURCE DEST  常用選項: -i:交互式 -r: 遞歸復制目錄及內部的所有內容 -a: 歸檔 演示: SRC是文件,會將/etc/fstab 中內容覆蓋到/bin/po…

    Linux干貨 2016-06-23
  • Gitlab代碼管理倉庫安裝部署

    GitLab是利用 Ruby on Rails一個開源的版本管理系統,實現一個自托管的Git項目倉庫,可通過Web界面進行訪問公開的或者私人項目。它擁有與Github類似的功能,能夠瀏覽源代碼,管理缺陷和注釋??梢怨芾韴F隊對倉庫的訪問,它非常易于瀏覽提交過的版本并提供一個文件歷史庫。它還提供一個代碼片段收集功能可以輕松實現代碼復用,便于日后有需要的時候進行查…

    2016-07-26
  • php-fpm

    1.安裝 mariadb 服務 修改配置文件 2.musql 安全加強 3.安裝 php-fpm php-mysql php-mbstring php-mcrypt 服務 修改配置文件 4.安裝httpd服務 加虛擬主機配置文件 5.測試php網頁 6.安裝myadmin包及測試

    2017-06-04
  • 馬哥教育網絡班21期第1周課程練習 — 草稿

    1、描述計算機的組成及其功能。     計算機的主要組成部分包括:運算器、控制器、存儲器、輸入設備、輸出設備。        按更常見的組件來講:CPU = 運算器+控制器、 內存+硬盤 = 存儲器、 I/O = 輸入設備+輸出設備  &n…

    Linux干貨 2016-07-07

評論列表(1條)

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

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

欧美性久久久久