一、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 crontabs
code
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