定時任務Crond介紹
Crond是linux系統中用來定期執行指令/腳本或指定程式任務的一種服務或軟體,一般情況下,我們安裝完Centos5/6 linux作業系統之後,預設便會啟動Crond任務排程服務。
Crond服務會定期(預設每分鐘檢查一次)檢查系統中是否有要執行的任務工作,如果有,便會根據其預先設定的定時任務規則自動執行該定時任務工作,這個crond定時任務服務就相當于我們平時早起使用的鬧鐘一樣。
必須保留的啟動服務:
crond:定時任務服務
network:網絡服務
rsyslog:日志服務
sshd:遠端連結服務
sysstat:系統監控服務(涉及一系列監控工具)

為什麼要使用定時任務呢?
我們舉個例子說明:例如,我們的資料庫或者代碼程式需要每天晚上0點做一次全備份,這樣每天夜裡都需要執行的周期性工作,如果要讓人操作的話,就得每天半夜爬起來,然後登入系統執行任務,執行完接着睡覺。另外,執行任務的過程也可能持續幾個小時,這樣一來,一個晚上我們就都不用睡覺了,這樣顯然是不行的。那麼有什麼辦法來解決這個周期性的執行任務需求呢?
這就是linux系統的定時任務Crond,這相當于我們平時生活中的鬧鐘功能,每天晚上提前設定定時,早晨按時叫醒你。
ls -l /var/log/messages* #系統的日志
ls -l /var/log/secure* #使用者登入日志
使用者執行的任務工作:某個使用者或系統管理者定期要做的任務工作,例如每隔5分鐘和網際網路上時間伺服器進行時間同步(這是安裝系統基礎優化部分的内容),每天晚上0點備份網站站點資料及資料庫資料,一般這些工作需要由每個運維自行設定才行。
伺服器時間同步
複制代碼 代碼如下:
echo "*/5 * * * * /usr/sbin/ntpdate time.nist.gov > /dev/null 2>&1" >> /var/spool/cron/root
可通過上面的指令設定每5分鐘執行一次。每次将網際網路時間同步到本地Linux系統。
crontab -l 檢視目前使用者的定時任務配置。*号 下面會詳講~~
time.nist.gov是NTP伺服器位址 time.windows.com,微軟自家的時間伺服器。 更多請參考 ==> 國内常用NTP伺服器位址及IP
crontab(指令):正如前面所說的這個指令可以周期性的執行任務工作,例如:每五分鐘做一次伺服器時間同步。要執行crontab這個指令,也需要啟動一個服務crond才行。這個crontab指令是生産工作中最常用到的指令,請大家務必掌握。
1、開機自啟動crond服務
2、此時此刻服務的狀态(檢視,開啟,關閉)
3、如何檢視程序
ps -ef | grep crond
小結提示:
我們所說的crond服務是運作的程式,而crontab是用來管理使用者的定時任務(規則)的指令
crond服務是企業生産工作中常用的重要服務,at和anacron很少用,可以忽略
幾乎每個伺服器都會用到crond服務
上千伺服器可以開發分布式定時任務項目方案(批量管理ansible/saltstack)
定時任務Crond使用說明
[[email protected] ~]# crontab --help
crontab: invalid option -- '-'
crontab: usage error: unrecognized option
usage: crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]
(default operation is replace, per 1003.2)
-e (edit user's crontab)
-l (list user's crontab)
-r (delete user's crontab)
-i (prompt before deleting user's crontab)
-s (selinux context)
[[email protected] ~]#
crontab -l 檢視目前使用者的定時任務配置
crontab -e 進入目前使用者的定時任務vim編輯模式
crontab -u 使用者名 -l 檢視指定使用者的定時任務設定
重點
通過crontab我們可以在固定的間隔時間執行指定的系統指令或script腳本。時間間隔的機關可以是分鐘,小時,日,月,周及以上的任意組合(注意:日和周不要組合)。crond服務通過crontab指令可以很容易的實作周期性的日志分析或資料備份等企業運維場景工作
使用者權限及定時任務檔案
檔案
說明
/etc/cron.deny(拒絕)
該檔案中所列使用者不允許使用crontab
/etc/cron.allow(允許)
該檔案優先級高于cron.deny(預設不存在,一般不用)
/var/spool/cron/
所有使用者crontab配置檔案預設都存在此目錄,檔案名以使用者名命名
[root[email protected] ~]# cat /etc/cron.deny
zcl
[[email protected]~]# su - zcl
[[email protected]~]$ crontab -l
You (chensiqi) are not allowed to use this program (crontab)
See crontab(1) for more information
[[email protected]~]$ crontab -e
You (chensiqi) are not allowed to use this program (crontab)
See crontab(1) for more information
crontab { -l | -e } 實際上就是在操作/var/spool/cron/目前使用者這樣的檔案
預設情況下,當使用者建立定時任務規則後,該規則記錄對應的配置檔案會存在于/var/spool/cron中,其crontab配置檔案對應的檔案名與登入的使用者名一緻,如:root使用者的定時任務配置檔案為/var/spool/cron/root
[[email protected] ~]# ls /var/spool/cron/
root #預設是沒有的,隻有建立了定時任務才有
[[email protected] ~]# cat /var/spool/cron/root
*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1
Crontab定時任務的書寫格式很簡單,使用者的定時任務規則一般分為6個段(每個段通過空格來分隔,系統的定時任務為/etc/crontab,分為7個段,空格來分隔),前五段為時間的設定段,第六段為所要執行的指令或腳本任務段
使用者定時任務執行個體:
01 * * * * cmd #每小時的01分鐘執行
02 04 * * * cmd #每天4點的02分鐘執行
22 14 * * 00 cmd #每周日的14點22分執行
42 04 01 * * cmd #每月1日的4點42分執行
提示:
1、cmd為要執行的指令或腳本,例如:/bin/sh /server/scripts/chensiqi.sh
2、每個列之間必須要有一個空格。多個空格可以麼?自己實踐 ==> 經我本人測試有多個空格也可以執行!!
時間記憶口訣:分時日月周
crontab 文法格式中特殊符号含義如下表
特殊符号
含義
*
*号,表示任意時間都,實際就是“每”的意思
-
減号表示分隔符,表示一個時間範圍,區間段,如17-19點,例如:每天的17,18,19點的00分執行任務。00 17-19 * * * cmd
,
逗号,表示分隔時段的意思例如每天的5點10點00分執行任務,00 5,10 * * * cmd
/n
n代表數字,即“每隔n機關時間”,例如:每10分鐘執行一次任務可以寫成/*10* * * * cmd,其中,/10,的範圍是0-59,是以也可以寫成0-59/10