1. 程式人生 > >Linux實戰教學筆記11:linux定時任務

Linux實戰教學筆記11:linux定時任務

第十一節 linux定時任務

標籤(空格分隔): Linux實戰教學筆記

---更多資料點我檢視

1.1 定時任務Crond介紹

Crond是linux系統中用來定期執行命令/指令碼或指定程式任務的一種服務或軟體,一般情況下,我們安裝完Centos5/6 linux作業系統之後,預設便會啟動Crond任務排程服務,在我們前面的系統安裝及開機啟動優化的設定中,我們也設定保留了Crond開機自啟動,Crond服務會定期(預設每分鐘檢查一次)檢查系統中是否有要執行的任務工作,如果有,便會根據其預先設定的定時任務規則自動執行該定時任務工作,這個crond定時任務服務就相當於我們平時早起使用的鬧鐘一樣。

1.2 開始做linux開機自啟動服務優化

必須最低保留的啟動服務:

crond:定時任務服務
network:網路服務
rsyslog:日誌服務
sshd:遠端連結服務
sysstat:系統監控服務(涉及一系列監控工具)

1.2.1小結

  • 常用服務,必須開機啟動的服務crond,sshd,network,rsyslog,sysstat
  • 命令拼接(awk/sed)==>品良==>迴圈

1.2.2 為什麼要使用Crond定時任務?

  • 為什麼要使用定時任務呢?
  • 我們舉個例子說明:例如,我們的資料庫或者程式碼程式需要每天晚上0點做一次全備份,這樣每天夜裡都需要執行的週期性工作,如果要讓人操作的話,就得每天半夜爬起來,然後登入系統執行任務,執行完接著睡覺。另外,執行任務的過程也可能持續幾個小時,這樣一來,一個晚上我們就都不用睡覺了,這樣顯然是不行的。那麼有什麼辦法來解決這個週期性的執行任務需求呢?
  • 這就是linux系統的定時任務Crond,這相當於我們平時生活中的鬧鐘功能,每天晚上提前設定定時,早晨按時叫醒你。

1.2.3 linux系統的定時任務

linux系統中定時任務排程的工作可以分為以下兩種情況:
,linux系統自身定期執行的任務工作:系統週期性自行執行的任務工作,如輪詢系統日誌,備份系統資料,清理系統快取等,這些任務無需我們人為干預。

[[email protected] ~]# ls -l /var/log/messages*  #系統的日誌
-rw-------. 1 root root    4680 Feb  4 07
:41 /var/log/messages -rw-------. 1 root root 191470 Dec 25 05:44 /var/log/messages-20161225 -rw-------. 1 root root 1492005 Jan 2 06:51 /var/log/messages-20170102 -rw-------. 1 root root 633737 Jan 8 08:02 /var/log/messages-20170108 -rw-------. 1 root root 1594144 Feb 4 04:25 /var/log/messages-20170204 [[email protected] ~]#
[[email protected] ~]# ls -l /var/log/secure*  #使用者登入日誌
-rw-------. 1 root root   872 Feb  4 07:13 /var/log/secure
-rw-------. 1 root root  5254 Dec 25 05:44 /var/log/secure-20161225
-rw-------. 1 root root 64822 Jan  2 06:27 /var/log/secure-20170102
-rw-------. 1 root root 14187 Jan  8 07:22 /var/log/secure-20170108
-rw-------. 1 root root 13540 Jan 12 00:17 /var/log/secure-20170204
[[email protected] ~]# 

,使用者執行的任務工作:某個使用者或系統管理員定期要做的任務工作,例如每隔5分鐘和網際網路上時間伺服器進行時間同步(這是安裝系統基礎優化部分的內容),每天晚上0點備份網站站點資料及資料庫資料,一般這些工作需要由每個運維自行設定才行。

例如:伺服器時間同步

[[email protected] ~]# crontab -l
*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1
[[email protected] ~]# 

使用者執行的任務工作,也就是我們運維管理人員執行的任務工作,因此,這個使用者執行的任務是我們今天討論的重點

1.2.4 linux系統下定時任務軟體的種類

嚴格的說,linux系統下的定時任務軟體還真不少,例如:at,crontab,anacron
假如:某天晚上需要處理一個任務,僅僅是這一天的晚上,屬於突發性的工作任務。要執行at命令,還需要啟動一個名為atd的服務才行,在實際工作中,還真沒碰到需要用到它的時候。因此,建議大家不要深入研究了,到此我們講解到這裡為止即可。

  • crontab(命令):正如前面所說的這個命令可以週期性的執行任務工作,例如:每五分鐘做一次伺服器時間同步。要執行crontab這個命令,也需要啟動一個服務crond才行,這個crontab命令是生產工作中最常用到的命令,請大家務必掌握。

1,開機自啟動crond服務

[[email protected] ~]# chkconfig --list | grep crond
crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off
[[email protected] ~]# 

2,此時此刻服務的狀態(檢視,開啟,關閉)

[[email protected] ~]# /etc/init.d/crond status
crond (pid  1139) is running...
[[email protected] ~]# 

/etc/init.d 服務啟動命令(指令碼)
3,如何檢視程序
ps -ef | grep crond

  • anacron:這個命令主要用於非7*24小時開機的伺服器準備的,anacron並不能指定具體時間執行任務工作,而是以天為週期或者在系統每次開機後執行的任務工作。
    它會檢測伺服器停機期間應該執行,但是並沒有進行的任務工作,並將該任務執行一遍。

小結提示:
1,我們所說的crond服務是執行的程式,而crontab是用來管理使用者的定時任務(規則)的命令
2,crond服務是企業生產工作中常用的重要服務,at和anacron很少用,可以忽略
3,幾乎每個伺服器都會用到crond服務
4,上千伺服器可以開發分散式定時任務專案方案(批量管理ansible/saltstack)

1.3 定時任務Crond使用說明

1.3.1 指令語法

crontab [-u user] { -l | -e | -r | -i }
檢視系統幫助
man crontab

[[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 檢視當前使用者的定時任務配置

[[email protected] ~]# crontab -l
*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1

crontab -e 進入當前使用者的定時任務vim編輯模式

crontab -u 使用者名稱 -l 檢視指定使用者的定時任務設定

[[email protected] ~]# crontab -u root -l
*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1
[[email protected] ~]# crontab -u chensiqi -l
no crontab for chensiqi

1.3.2 指令說明

通過crontab我們可以在固定的間隔時間執行指定的系統指令或script指令碼。時間間隔的單位可以是分鐘,小時,日,月,周及以上的任意組合(注意:日和周不要組合)。crond服務通過crontab命令可以很容易的實現週期性的日誌分析或資料備份等企業運維場景工作

1.3.3 使用者許可權及定時任務檔案

檔案 說明
/etc/cron.deny(拒絕) 該檔案中所列使用者不允許使用crontab
/etc/cron.allow(允許) 該檔案優先順序高於cron.deny(預設不存在,一般不用)
/var/spool/cron/ 所有使用者crontab配置檔案預設都存在此目錄,檔名以使用者名稱命名
[[email protected] ~]# cat /etc/cron.deny 
chensiqi
[[email protected] ~]# su - chensiqi
[[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
[[email protected] ~]# ls /var/spool/cron/
root   #預設是沒有的,只有建立了定時任務才有
[[email protected] ~]# cat /var/spool/cron/root
*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1

1.3.4 指令選項說明含義表

引數 含義
-l(字母) 檢視crontab檔案內容
-e 編輯crontab檔案內容
-r 刪除crontab檔案內容(用的很少)
-u user 指定使用的使用者執行任務

特別強調:-r引數在生產中很少用,沒什麼特殊需求必須要用-e進入編輯即可

補充:

crontab { -l | -e } 實際上就是在操作/var/spool/cron/當前使用者這樣的檔案
使用crontab命令的優點:
1,crontab可以檢查語法
2,輸入方便

1.3.5 定時任務指令的使用格式

預設情況下,當用戶建立定時任務規則後,該規則記錄對應的配置檔案會存在於/var/spool/cron中,其crontab配置檔案對應的檔名與登入的使用者名稱一致,如:root使用者的定時任務配置檔案為/var/spool/cron/root
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,每個列之間必須要有一個空格。多個空格可以麼?自己實踐

1.3.6 crontab 語法格式中時間段的含義如下表

含義
第一段 代表分鐘
第二段 代表小時
第三段 代表日,天
第四段 代表月份
第五段 代表星期,周幾

提示:時間記憶口訣:分時日月周。取值範圍記憶:正常日期時間範圍,小學生都會的了

1.3.7 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

1.3.8 學習畫圖來表達說明(億圖)

強調:這是學習態度的體現,這種態度極其重要,不要單純理解技術,多結合畫圖,案例理解原理,記一次很久都忘不掉。
要學好linux運維請從排版畫圖開始

第十一節 linux定時任務

標籤(空格分隔): Linux實戰教學筆記

---更多資料點我檢視

1.1 定時任務Crond介紹

Crond是linux系統中用來定期執行命令/指令碼或指定程式任務的一種服務或軟體,一般情況下,我們安裝完Centos5/6 linux作業系統之後,預設便會啟動Crond任務排程服務,在我們前面的系統安裝及開機啟動優化的設定中,我們也設定保留了Crond開機自啟動,Crond服務會定期(預設每分鐘檢查一次)檢查系統中是否有要執行的任務工作,如果有,便會根據其預先設定的定時任務規則自動執行該定時任務工作,這個crond定時任務服務就相當於我們平時早起使用的鬧鐘一樣。

1.2 開始做linux開機自啟動服務優化

必須最低保留的啟動服務:

crond:定時任務服務
network:網路服務
rsyslog:日誌服務
sshd:遠端連結服務
sysstat:系統監控服務(涉及一系列監控工具)

1.2.1小結

  • 常用服務,必須開機啟動的服務crond,sshd,network,rsyslog,sysstat
  • 命令拼接(awk/sed)==>品良==>迴圈

1.2.2 為什麼要使用Crond定時任務?

  • 為什麼要使用定時任務呢?
  • 我們舉個例子說明:例如,我們的資料庫或者程式碼程式需要每天晚上0點做一次全備份,這樣每天夜裡都需要執行的週期性工作,如果要讓人操作的話,就得每天半夜爬起來,然後登入系統執行任務,執行完接著睡覺。另外,執行任務的過程也可能持續幾個小時,這樣一來,一個晚上我們就都不用睡覺了,這樣顯然是不行的。那麼有什麼辦法來解決這個週期性的執行任務需求呢?
  • 這就是linux系統的定時任務Crond,這相當於我們平時生活中的鬧鐘功能,每天晚上提前設定定時,早晨按時叫醒你。

1.2.3 linux系統的定時任務

linux系統中定時任務排程的工作可以分為以下兩種情況:
,linux系統自身定期執行的任務工作:系統週期性自行執行的任務工作,如輪詢系統日誌,備份系統資料,清理系統快取等,這些任務無需我們人為干預。

[[email protected] ~]# ls -l /var/log/messages*  #系統的日誌
-rw-------. 1 root root    4680 Feb  4 07:41 /var/log/messages
-rw-------. 1 root root  191470 Dec 25 05:44 /var/log/messages-20161225
-rw-------. 1 root root 1492005 Jan  2 06:51 /var/log/messages-20170102
-rw-------. 1 root root  633737 Jan  8 08:02 /var/log/messages-20170108
-rw-------. 1 root root 1594144 Feb  4 04:25 /var/log/messages-20170204
[[email protected] ~]# 
[[email protected] ~]# ls -l /var/log/secure*  #使用者登入日誌
-rw-------. 1 root root   872 Feb  4 07:13 /var/log/secure
-rw-------. 1 root root  5254 Dec 25 05:44 /var/log/secure-20161225
-rw-------. 1 root root 64822 Jan  2 06:27 /var/log/secure-20170102
-rw-------. 1 root root 14187 Jan  8 07:22 /var/log/secure-20170108
-rw-------. 1 root root 13540 Jan 12 00:17 /var/log/secure-20170204
[[email protected] ~]# 

,使用者執行的任務工作:某個使用者或系統管理員定期要做的任務工作,例如每隔5分鐘和網際網路上時間伺服器進行時間同步(這是安裝系統基礎優化部分的內容),每天晚上0點備份網站站點資料及資料庫資料,一般這些工作需要由每個運維自行設定才行。

例如:伺服器時間同步

[[email protected] ~]# crontab -l
*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1
[[email protected] ~]# 

使用者執行的任務工作,也就是我們運維管理人員執行的任務工作,因此,這個使用者執行的任務是我們今天討論的重點

1.2.4 linux系統下定時任務軟體的種類

嚴格的說,linux系統下的定時任務軟體還真不少,例如:at,crontab,anacron
假如:某天晚上需要處理一個任務,僅僅是這一天的晚上,屬於突發性的工作任務。要執行at命令,還需要啟動一個名為atd的服務才行,在實際工作中,還真沒碰到需要用到它的時候。因此,建議大家不要深入研究了,到此我們講解到這裡為止即可。

  • crontab(命令):正如前面所說的這個命令可以週期性的執行任務工作,例如:每五分鐘做一次伺服器時間同步。要執行crontab這個命令,也需要啟動一個服務crond才行,這個crontab命令是生產工作中最常用到的命令,請大家務必掌握。

1,開機自啟動crond服務

[[email protected] ~]# chkconfig --list | grep crond
crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off
[[email protected] ~]# 

2,此時此刻服務的狀態(檢視,開啟,關閉)

[[email protected] ~]# /etc/init.d/crond status
crond (pid  1139) is running...
[[email protected] ~]# 

/etc/init.d 服務啟動命令(指令碼)
3,如何檢視程序
ps -ef | grep crond

  • anacron:這個命令主要用於非7*24小時開機的伺服器準備的,anacron並不能指定具體時間執行任務工作,而是以天為週期或者在系統每次開機後執行的任務工作。
    它會檢測伺服器停機期間應該執行,但是並沒有進行的任務工作,並將該任務執行一遍。

小結提示:
1,我們所說的crond服務是執行的程式,而crontab是用來管理使用者的定時任務(規則)的命令
2,crond服務是企業生產工作中常用的重要服務,at和anacron很少用,可以忽略
3,幾乎每個伺服器都會用到crond服務
4,上千伺服器可以開發分散式定時任務專案方案(批量管理ansible/saltstack)

1.3 定時任務Crond使用說明

1.3.1 指令語法

crontab [-u user] { -l | -e | -r | -i }
檢視系統幫助
man crontab

[[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 檢視當前使用者的定時任務配置

[[email protected] ~]# crontab -l
*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1

crontab -e 進入當前使用者的定時任務vim編輯模式

crontab -u 使用者名稱 -l 檢視指定使用者的定時任務設定

[[email protected] ~]# crontab -u root -l
*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1
[[email protected] ~]# crontab -u chensiqi -l
no crontab for chensiqi

1.3.2 指令說明

通過crontab我們可以在固定的間隔時間執行指定的系統指令或script指令碼。時間間隔的單位可以是分鐘,小時,日,月,周及以上的任意組合(注意:日和周不要組合)。crond服務通過crontab命令可以很容易的實現週期性的日誌分析或資料備份等企業運維場景工作

1.3.3 使用者許可權及定時任務檔案

檔案 說明
/etc/cron.deny(拒絕) 該檔案中所列使用者不允許使用crontab
/etc/cron.allow(允許) 該檔案優先順序高於cron.deny(預設不存在,一般不用)
/var/spool/cron/ 所有使用者crontab配置檔案預設都存在此目錄,檔名以使用者名稱命名
[[email protected] ~]# cat /etc/cron.deny 
chensiqi
[[email protected] ~]# su - chensiqi
[[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
[[email protected] ~]# ls /var/spool/cron/
root   #預設是沒有的,只有建立了定時任務才有
[[email protected] ~]# cat /var/spool/cron/root
*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1

1.3.4 指令選項說明含義表

引數 含義
-l(字母) 檢視crontab檔案內容
-e 編輯crontab檔案內容
-r 刪除crontab檔案內容(用的很少)
-u user 指定使用的使用者執行任務

特別強調:-r引數在生產中很少用,沒什麼特殊需求必須要用-e進入編輯即可

補充:

crontab { -l | -e } 實際上就是在操作/var/spool/cron/當前使用者這樣的檔案
使用crontab命令的優點:
1,crontab可以檢查語法
2,輸入方便

1.3.5 定時任務指令的使用格式

預設情況下,當用戶建立定時任務規則後,該規則記錄對應的配置檔案會存在於/var/spool/cron中,其crontab配置檔案對應的檔名與登入的使用者名稱一致,如:root使用者的定時任務配置檔案為/var/spool/cron/root
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,每個列之間必須要有一個空格。多個空格可以麼?自己實踐

1.3.6 crontab 語法格式中時間段的含義如下表

含義
第一段 代表分鐘
第二段 代表小時
第三段 代表日,天
第四段 代表月份
第五段 代表星期,周幾

提示:時間記憶口訣:分時日月周。取值範圍記憶:正常日期時間範圍,小學生都會的了

1.3.7 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

1.3.8 學習畫圖來表達說明(億圖)

強調:這是學習態度的體現,這種態度極其重要,不要單純理解技術,多結合畫圖,案例理解原理,記一次很久都忘不掉。
要學好linux運維請從排版畫圖開始