1. 程式人生 > >Shell指令碼之crontab定時任務

Shell指令碼之crontab定時任務

crontab定時任務

crondtab是linux下用來週期性的執行某種任務或等待處理某些事件的一個守護程序,與windows下的計劃任務類似,crondtab程序每分鐘會定期檢查是否有要執行的任務,如果有要執行的任務,則自動執行該任務。

        每個使用者都有自己的排程crontab,可以使用crontab -u user -e或切換到user使用vim /etc/crontab(也可crontab -e)編輯crontab定時任務排程表。crontab命令選項意義如下:

      linux還定義了兩個控制檔案來控制crontab,它們是:/etc/cron.allow和/etc/cron.deny。/etc/cron.allow表示哪些使用者能使用crontab命令,若cron.allow為空則表明所有使用者都不能安排定時任務;若該檔案不存在則會檢視/etc/cron.deny,只有不包含在這個檔案中的使用者才可以使用crontab命令;若cron.deny為空則任何使用者都可以安排作業。兩個檔案同時存在cron.allow優先,同時不存在只有root使用者能安排定時任務。

      開啟/etc/crontab:

crontab檔案的基本格式 :
*         *   *    *       *  command 
minute  hour   day   month   week   command

其中:

minute: 表示分鐘,可以是從0到59之間的任何整數(每分鐘用*或者 */1表示)。

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

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

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

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

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

在以上各個欄位中,還可以使用以下特殊字元:

星號(*):代表所有可能的值,例如month欄位如果是星號,則表示在滿足其它欄位的制約條件後每月都執行該命令操作。

逗號(,):可以用逗號隔開的值指定一個列表範圍,例如,“1,2,5,7,8,9”

中槓(-):可以用整數之間的中槓表示一個整數範圍,例如“2-6”表示“2,3,4,5,6”

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

      crontab
例子如:下午4:50刪除/abc目錄下所有子目錄和檔案:  50 16 * * * rm -r /abc/*

      crontab實現定時檔案備份的例子,shell指令碼實現備份功能,在crontab中定時每天執行指令碼。指令碼名稱為fileback.sh.

  1. #使用root許可權將/etc目錄下的所有內容進行備份
  2. #fileback.sh
  3. #!/bin/bash
  4. DIRNAME=`ls /root | grep bak`       #獲取/root/bak字串  
  5. if [ -z "$DIRNAME" ]                #如果/root/bak不存在,則建立一個  
  6. then  
  7. mkdir /root/bak  
  8. cd /root/bak  
  9. fi  
  10. #獲取當前年、月、日資料儲存到YY、MM、DD變數中
  11. YY=`date +%y`  
  12. MM=`date +%m`  
  13. DD=`date +%d`  
  14. BACKETC=$YY$MM$DD_etc.tar.gz        #備份檔案的名字  
  15. tar zcvf $BACKETC /etc              #將/etc所有檔案打包  
  16. echo "fileback finished!"
      先登入root使用者,cat /etc/crontab,在末尾加上:59 23 * * * /bin/bash /use/bin/filebach.sh,表示每天23:59執行一次filebach.sh指令碼。