1. 程式人生 > >Linux定時器詳解

Linux定時器詳解

今天在看linux的定時任務,瞭解了一下crontab命令,下面我們來一起學習一下。

首先要知道 crontab 檔案的格式:

{minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script} 
o minute: 區間為 0 – 59 
o hour: 區間為0 – 23 
o day-of-month: 區間為0 – 31 
o month: 區間為1 – 12. 1 是1月. 12是12月. 
o Day-of-week: 區間為0 – 7. 週日可以是0或7.


Crontab簡單示例

1、在 凌晨00:01執行

1 0 * * * /home/linrui/XXXX.sh

2、每個工作日23:59都進行備份作業。

59 11 * * 1,2,3,4,5 /home/linrui/XXXX.sh   

或者如下寫法:

59 11 * * 1-5 /home/linrui/XXXX.sh

3、每分鐘執行一次命令

*/1 * * * * /home/linrui/XXXX.sh

4、每個月的1號 14:10 執行

10 14 1 * * /home/linrui/XXXX.sh

 

Crontab命令的選項

以下是 crontab 的有效選項:

crontab –e : 修改 crontab 檔案. 如果檔案不存在會自動建立。 
crontab –l : 顯示 crontab 檔案。 
crontab -r : 刪除 crontab 檔案。
crontab -ir : 刪除 crontab 檔案前提醒使用者。


在以上各個欄位中,還可以使用以下特殊字元:
星號(*):代表所有可能的值,例如month欄位如果是星號,則表示在滿足其它欄位的制約條件後每月都執行該命令操作。
 逗號(,):可以用逗號隔開的值指定一個列表範圍,例如,“1,2,5,7,8,9”
中槓(-):可以用整數之間的中槓表示一個整數範圍,例如“2-6”表示“2,3,4,5,6”
正斜線(/):可以用正斜線指定時間的間隔頻率,例如“0-23/2”表示每兩小時執行一次。
同時正斜線可以和星號一起使用,例如*/10,如果用在minute欄位,表示每十分鐘執行一次。
下面我做了一個很小的例子,通過這個小例子我們可以瞭解到定時任務的建立和刪除

1.編寫shell指令碼hello.sh:

#!/bin/bash
echo "Hello World !"  >> test
#這個意思是向test檔案內輸入“Hello World!"這句話
2.將指令碼放到cron任務裡:
在終端寫入crontab -e命令開啟crontab檔案
在裡面寫:*/1 * * * * /home/wyx/hello.sh (這個路徑是你存放指令碼的路徑)
寫完後儲存退出
3.輸入命令:crontab -l 可以檢視任務如圖:


4.你會看到系統自動新建了一個test檔案並每隔一分鐘往裡輸入一句“Hello World!",如圖

 

 

這樣我們的定時任務就建好了

接下來如果我們想要刪除這個任務怎麼辦呢

增加了crontab任務後,在/var/spool/cron目錄下會有一個當前登入賬號命名的檔案。比如我的登入賬號是wyx。則會存在一個wyx檔案。該檔案的內容就是剛新增的crontab任務。

該處我們使用sed命令來處理/var/spool/cron/wyx 檔案,將含hello.sh的行的內容刪除掉。

輸入命令:sed -i '/hello.sh/d' /var/spool/cron/wyx

可以檢視任務 crontab -l 發現我們剛剛建立的任務沒有了

有沒有很簡單呢,趕緊試試吧

 

---------------------
作者:wyx_wyl
來源:CSDN
原文:https://blog.csdn.net/wyx_wyl/article/details/78307984
版權宣告:本文為博主原創文章,轉載請附上博文連結!

 

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1、  crontab命令概念

 

crontab命令用於設定週期性被執行的指令。該命令從標準輸入裝置讀取指令,並將其存放於“crontab”檔案中,以供之後讀取和執行。

 

 

cron 系統排程程序。 可以使用它在每天的非高峰負荷時間段執行作業,或在一週或一月中的不同時段執行。cron是系統主要的排程程序,可以在無需人工干預的情況下執行作業。

crontab命令允許使用者提交、編輯或刪除相應的作業。每一個使用者都可以有一個crontab檔案來儲存排程資訊。系統管理員可以通過/etc/cron.deny 和 /etc/cron.allow 這兩個檔案來禁止或允許

使用者擁有自己的crontab檔案。

 

 

2、檢查是否安裝了crontab,如果提示未安裝請自行安裝,crontab安裝包在系統光盤裡面的pacekage資料夾crontabs安裝包。

 

 

 

 

3、  crontab服務啟動與關閉。

 

 

 

4、  全域性配置檔案:

 

crontab在/etc目錄下面存在cron.hourly,cron.daily,cron.weekly,cron.monthly,cron.d五個目錄和crontab,cron.deny二個檔案。

 

 

cron.daily是每天執行一次的job

cron.weekly是每個星期執行一次的job

cron.monthly是每月執行一次的job

cron.hourly是每個小時執行一次的job

cron.d是系統自動定期需要做的任務

crontab是設定定時任務執行檔案

cron.deny檔案就是用於控制不讓哪些使用者使用Crontab的功能

 

 

5、  使用者配置檔案:

 

每個使用者都有自己的cron配置檔案,通過crontab -e 就可以編輯,一般情況下我們編輯好使用者的cron配置檔案儲存退出後,系統會自動就存放於/var/spool/cron/目錄中,檔案以使用者名稱命名.linux的cron服務是每隔一分鐘去讀取一次/var/spool/cron,/etc/crontab,/etc/cron.d下面所有的內容.

 

 

 

6、  crontab檔案格式:

 

  *           *        *        *        *           command

minute   hour    day   month   week      command

分          時         天      月        星期       命令

 

 

minute: 表示分鐘,可以是從0到59之間的任何整數。

hour:表示小時,可以是從0到23之間的任何整數。

day:表示日期,可以是從1到31之間的任何整數。

month:表示月份,可以是從1到12之間的任何整數。

week:表示星期幾,可以是從0到7之間的任何整數,這裡的0或7代表星期日。

command:要執行的命令,可以是系統命令,也可以是自己編寫的指令碼檔案。

 

 

7、 特殊字元:

 

星號(*):代表每的意思,例如month欄位如果是星號,則表示每月都執行該命令操作。

 

逗號(,):表示分隔時段的意思,例如,“1,3,5,7,9”。

 

中槓(-):表示一個時間範圍,例如“2-6”表示“2,3,4,5,6”。

 

正斜線(/):可以用正斜線指定時間的間隔頻率,例如“0-23/2”表示每兩小時執行一次。同時正斜線可以和星號一起使用,例如*/10,如果用在minute欄位,表示每十分鐘執行一次。

 

 

8、在home目錄下編寫一個test.sh指令碼,指令碼功能是把/home下ifcfg-eth0這個文字複製到/mnt目錄下。

 

 

 

9、執行crontab –e 編寫一條定時任務 */5 * * * * /home/test.sh 在每5分鐘執行一次test.sh指令碼。

 

 

 

10、查詢當前使用者定時任務或刪除當前使用者定時任務。

 

 

 

11、設定crond開機自動啟動。

 

 

 

12、例項:

 

 

 ##每月每天凌晨3點30分和中午12點20分執行test.sh指令碼

30 3,12 * * *  /home/test.sh           

 

##每月每天每隔6小時的每30分鐘執行test.sh指令碼

30 */6 * * *  /home/test.sh

 

##每月每天早上8點到下午18點每隔2小時的每30分鐘執行test.sh指令碼

30 8-18/2 * * * /etc/init.d/network restart

 

##每月每天晚上21點30分執行test.sh指令碼

30 21 * * *  /etc/init.d/network restart

 

##每月1號、10號、22號凌晨4點45分執行test.sh指令碼

45 4 1,10,22 * * /etc/init.d/network restart

 

##8月份週一、週日凌晨1點10分執行test.sh指令碼

10 1 * 8 6,0 /etc/init.d/network restart

 

##每月每天每小時整點執行test.sh指令碼

00 */1 * * *  /etc/init.d/network restart

 

注意:

 #寫法不規範,分鐘應該寫成 00

* 23,00-07/1 * * * /etc/init.d/network restart  

 ##強調,周和日儘量不要同時使用,否則達不到想要的效果

 00 11 * 4 1-3 /etc/init.d/network restart