CentOS之crontab

一、crontab介紹node

功能說明:設置計時器。shell

語  法:crontab [-u <用戶名稱>][配置文件] 或 crontab [-u <用戶名稱>][-elr]apache

補充說明:cron是一個常駐服務,它提供計時器的功能,讓用戶在特定的時間得以執行預設的指令或程序。只要用戶會編輯計時器的配置文件,就可使用計時器的功能。bash

配置文件格式:Minute Hour Day Month Day Of Week Commandide

參  數: 
-e:編輯該用戶的計時器設置; 
-l:列出該用戶的計時器設置; 
-r:刪除該用戶的計時器設置; 
-u:<用戶名稱>  指定要設定計時器的用戶名稱; 
-i:在使用-r選項移除全部任務時,提示用戶,用戶確認;url

二、crontab 配置文件書寫格式spa

*      *      *      *      *    /bin/bash command
分     時    日     月     周     命令
  
第1列表示分鐘1~59 每分鐘用*或者 */1表示
第2列表示小時1~23(0表示0點)
第3列表示日期1~31
第4列表示月份1~12
第5列標識號星期0~6(0表示星期天)
第6列要運行的命令

除了數字還有幾個個特殊的符號就是 「星號 」 、「 / 」 、「 - 」 、「 , 」 --星號表明全部的取值範圍內的數字,"/"表明每的意思,「*/5」表示每5個單位,「-」表明從某個數字到某個數字,「,」分開幾個離散的數字。

三、 crontabs安裝方法rest

yum install crontabscode

systemctl start crond.service #啓動服務orm

systemctl reload crond.service #從新載入配置

systemctl status crond.service #查看crontab服務狀態

四、其餘任務調度

cron默認配置了調度任務,分別爲:hourly、daily、weekly、mouthly 
默認配置文件爲/etc/anacrontab

將須要執行的腳本放到相應的目錄下便可,目錄分別爲:

/etc/cron.hourly

/etc/cron.daily

/etc/cron.weekly

/ect/cron.mouthly

五、關於主cron配置文件/etc/crontab

cron 的主配置文件是 /etc/crontab,它包括下面幾行

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

說明 
一、==前四行是用來配置 cron 任務運行環境的變量; 
Shell 
變量的值指定shell 環境(此處默認爲 bash shell); 
PATH 
變量定義用來執行命令的程序路徑; 
MAILTO 
cron任務的輸出被郵寄給 MAILTO 變量定義的用戶名,若是 MAILTO 變量被定義爲 空白字符串(MAILTO=」「),電子郵件就不會被寄出; 
HOME 
變量能夠用來設置在執行命令或腳本時使用的主目錄。如在/etc/crontab文件中run-parts部分所示,它使用 run-parts 腳原本執行存在於/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 和/etc/cron.monthly 目錄中的腳本,這些腳本被相應地按照預設時間在每小時、每日、每週、或每個月執行。這些目錄中的文件應該是 shell 腳本,而且具備可執行權限(chmod +x filename);
二、若是某 cron 任務須要根據調度來執行,而不是每小時、每日、每週、或每個月地執行,它能夠被添加到/etc/cron.d目錄中。該目錄中的全部文件使用和 /etc/crontab 中同樣的語法; 
三、每次編輯完某個用戶的cron設置後,cron自動在/var/spool/cron下生成一個與此用戶同名的文件,此用戶的cron信息都記錄在這個文件中,這個文件是不能夠直接編輯的,只能夠用crontab -e 來編輯。cron啓動後每過一份鍾讀一次這個文件,檢查是否要執行裏面的命令。所以此文件修改後不須要從新啓動cron服務;

六、舉例

30 21 * * * /usr/local/etc/rc.d/apache restart #每晚的21:30 重啓apache 
-----------------------------------------------------------------------------------------------
45 4 1,10,22 * * /usr/local/etc/rc.d/apache restart #每個月一、十、22日的4:45重啓apache 
-----------------------------------------------------------------------------------------------
10 1 * * 6,0 /usr/local/etc/rc.d/apache restart #每週6、週日的1:10重啓apache  
-----------------------------------------------------------------------------------------------
0,30 18-23 * * * /usr/local/etc/rc.d/apache restart #天天18:00至23:00之間每隔30分鐘重啓apache  
-----------------------------------------------------------------------------------------------
0 23 * * 6 /usr/local/etc/rc.d/apache restart #每星期六的11:00 pm重啓apache
-----------------------------------------------------------------------------------------------
* 23-7/1 * * * /usr/local/etc/rc.d/apache restart #晚上11點到早上7點之間,每隔一小時重啓 apache
-----------------------------------------------------------------------------------------------
* */1 * * * /usr/local/etc/rc.d/apache restart #每一小時重啓apache   
-----------------------------------------------------------------------------------------------
0 11 4 * mon-wed /usr/local/etc/rc.d/apache restart #每個月的4號與每週一到週三的11點重啓apache 
-----------------------------------------------------------------------------------------------  
0 4 1 jan * /usr/local/etc/rc.d/apache restart #一月一號的4點重啓apache  
-----------------------------------------------------------------------------------------------
*/30 * * * * /usr/sbin/ntpdate 210.72.145.44 #每半小時同步一下時間 
-----------------------------------------------------------------------------------------------
0 */2 * * * www /usr/bin/somecommand  >> /dev/null 2>&1 #以用戶www的身份每兩小時就運行某個程序

七、crontab權限管理

拒絕用戶使用crontab任務 
在/etc/cron.deny中添加要拒絕的用戶名,格式以下: 
listen 
username1 
…… 
容許用戶訪問crontab任務 
在/etc/cron.allow中添加要容許的用戶名,格式以下: 
root 
username1 
……

八、配置文件詳解

系統cron...

[root@node1 ~]# cat /etc/crontab 
SHELL=/bin/bash 
PATH=/sbin:/bin:/usr/sbin:/usr/bin 
MAILTO=root 
# For details see man 4 crontabs 
# 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 
# | | | | | 
# * * * * * user-name command to be executed 
解釋: 
一、每一行定義個週期性任務,共7個字段; 
———–* * * * * :定義週期性時間; 
———–user-name:表示運行此任務的用戶身份; 
———– command to be executed:指所要運行的任務是什麼; 
二、環境變量不一樣於用戶登陸後的環境,建議命令用絕對路徑。可自定義PATH路徑; 
三、執行結果以郵件發送給MAIL TO 指定的用戶;

用戶cron...

SHELL=/bin/bash 
PATH=/sbin:/bin:/usr/sbin:/usr/bin 
MAILTO=root 
# For details see man 4 crontabs 
# 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 
解釋: 
一、每一行定義個週期性任務,共6個字段; 
二、環境變量不一樣於用戶登陸後的環境,建議命令用絕對路徑。可自定義PATH路徑; 
三、執行結果以郵件發送給當前用戶;

九、時間表示法

一、特定值
    給定時間點有效取值範圍內的值;
    注意:day of week 和day of month 通常不一樣時使用
二、* 號
    給定時間點上有效取值分爲內的全部值;
        表示 「每......」
三、給定時間的離散表示法;
    在時間點上使用逗號分割的多個值;
        #,#,#
四、給定時間點的連續表示發
        -,減號表示
五、在指定時間點上,定義步長;
        / # 除號表示,#號即步長
        如:*/2 表示每兩分鐘
注意: 
沒法被步長所整除時,其意義不復存在,寫腳本;
最小時間單位爲「分鐘」,寫腳本for循環,case循環;

示例: 
(1) 3 * * * *,每小時執行一次,每小時的第三分鐘; 
(2) 3 4 * * 5,每週執行一次,每週五的4點3分; 
(3) 5 6 7 * *,每個月執行一次,每個月的7號的6點5分; 
(4) 7 8 9 10 *,每一年執行一次,每一年的10月9號8點7分; 
(5) 9 8 * * 3,7,每週三和週日; 
(6) 0 8,20 * * 3,7,每週三和每週日的8點到20點執行; 
(7) 0 9-18 * * 1-5,每週一到週五的9點到18點都執行; 
(8) */5 * * * *,每5分鐘執行一次某任務; 
(9) * * * * *,每分鐘執行一次;

注意事項說明

一、cron.allow名單是優先於cron.deny名單; 
二、運行結果是以郵件通知給當前用戶,若是要拒絕接收郵件則; 
COMMAND > /dev/null 
COMMAND &> /dev/null 
定義COMMAND時,若是須要用到% 須要轉義,但放置於單引號中的%不用轉義便可 
三、思考:某任務在指定的時間因關機未能執行,下次開機會不會自動執行; 
不會 
若是指望某時間因故未能按時執行,下次開機後不管是否到了相應時間點都要執行一次 
可以使用ancron實現;

done

相關文章
相關標籤/搜索