1. 程式人生 > >shell學習筆記之crontab

shell學習筆記之crontab

一:知識背景

  crontab是用來定時執行指令碼的程序,crond程序每分鐘會定時檢查是否有要執行的任務。作業系統會安裝完成會預設安裝工具並自動啟動crond程序。

  業務上主要用於:

      1.系統週期性執行的清理緩衝,備份系統資料

      2.個人使用者程序的守護、定時清理日誌 

二:語法知識

  crontab 【-u user】【-e| -r| -l】

 【-u user】:就是指定使用者的時程表,當然指定的前提是當前使用者許可權大於指定使用者。這個可以直接省略,就是表示以當前使用者建立、刪除或列出時程表,

 【-options】: -e 建立crontab檔案,內定的文字編輯指定是vim,所以也是分為命令列模式和文字模式,按i進行編輯

          -r 刪除當前時程表,許可權約束

        -l 列出當前時程表,許可權約束

  crontab檔案語法: crontab會進行語法檢查,vim不會

 大家看到的註釋就完美表達了crontab檔案的語法

* * * * * user-name command 

五個星號表示是 分 時 每月哪一天 月份 周幾

   * 代表不匹配  

   a-b 表示這段時間都執行

    a,b這個時間點都執行

  */n ,例如*/5 * * * * 表示每隔5分鐘執行一次,n為執行的頻率

### crontab也分為兩種:系統級和使用者級

  系統級位於/etc/crontab的方法只能root使用者使用,crontab -e這種所用使用者都可以使用並儲存在/var/spool/cron/username,系統級任務不會寫入後者。

crontab -e 和/etc/crontab修改語法不一致,/etc/crontab多一個user指定。cron會每分鐘讀取/etc/crontab和/var/spool/cron/username中的資料內容,因此,只要編輯完/etc/crontab檔案並儲存之後,

crontab會執行。

  那就是 crontab -e 這個 crontab 其實是 /usr/bin/crontab 這個執行檔,但是 /etc/crontab 可是一個純文字檔,必須用 root 的身份編輯這個檔案。

 

  系統級和使用者級區別還在於:

  MailTo=root:這個欄位就是每條任務排程執行完畢,系統都會將任務輸出資訊通過電子郵件的形式傳送給當前系統使用者,這樣日積月累,日誌資訊會非常大,可能會影響系統的正常執行,因此,將每條任務進行重定向處理非常重要。一般不處理就是放在/var/mail/username,所以一般都會將日誌資訊重定向到null。

  crontab -r 也只是刪除使用者級別的時程表,所有的/var/mail/username 刪除所有使用者檔案,或者加上user刪除特定使用者時程表,crontab -l 顯示的任務也都是使用者級任務。

crontab有一點需要大家注意的就是:

周(f5)和 日月(f3)不能並存,比如以下的模式:

0 0 12 12 5 root echo "just test" < 錯誤的寫法

 

  本來你以為12月12日且為星期五才會進行這項工作,無奈的是,系統可能會判定每個星期五作一次,或每年的12月1 2日分別進行,如此一來與你當初的規劃就不一樣了,得要注意這個地方!上述的寫法是不對的

 2