Linux命令總結--contab命令


       linux系統中的定時任務與兩部分組成,一部分是系統中自動的定時任務,叫做系統任務調度,另一種則是用戶自己寫的定時任務,叫做用戶任務調度,交給系統去執行。系統級任務調度主要完成系統的一些維護操作,用戶級任務調度主要完成用戶自定義的一些任務

        系統任務調度:系統周期性所要執行的工作,比如寫緩存數據到硬盤、日志清理等。在/etc目錄下有一個crontab文件,這個就是系統任務調度的配置文件。

/etc/crontab文件包括下面幾行:

[root@localhost ~]# cat /etc/crontab 

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=""HOME=/

 

# run-parts

51 * * * * root run-parts /etc/cron.hourly

24 7 * * * root run-parts /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.monthly

[root@localhost ~]#

 

前四行是用來配置crond任務運行的環境變量,第一行SHELL變量指定了系統要使用哪個shell,這里是bash,第二行PATH變量指定了系統執行命令的路徑,第三行MAILTO變量指定了crond的任務執行信息將通過電子郵件發送給root用戶,如果MAILTO變量的值為空,則表示不發送任務執行信息給用戶,第四行的HOME變量指定了在執行命令或者腳本時使用的主目錄。第六至九行表示的含義將在下個小節詳細講述。這里不在多說。

        用戶定時任務(用戶任務調度)用戶定期要執行的工作,比如用戶數據備份、定時郵件提醒等。用戶可以使用 crontab 工具來定制自己的計划任務。所有用戶定義的crontab 文件都被保存在 /var/spool/cron目錄中。其文件名與用戶名一致。它也分兩種,一種為一次性定時任務(at命令),另一個是周期性定時任務(crontab命令)。

關系圖如下:

 

  

今天我們主要講的是周期性的定時任務。

一.crond 介紹

crond 是linux系統中的用來執行周期性任務的守護進程,安裝時會默認安裝此進程,crond進程會每分鍾定期檢查是否有需要執行的任務,如果有,就自動執行該任務。

語法

crontab [ -u user ] file

crontab [ -u user ] { -l | -r | -e }

-u user 是指設定指定 user 的時程表,這個前提是你必須要有其權限(比如說是 root)才能夠指定他人的時程表。如果不使用 -u user 的話,就是表示設定自己的時程表。

參數說明

  • -e : 執行文字編輯器來設定時程表,內定的文字編輯器是 VI,如果你想用別的文字編輯器,則請先設定 VISUAL 環境變數來指定使用那個文字編輯器(比如說 setenv VISUAL joe)
  • -r : 刪除目前的時程表
  • -l : 列出目前的時程表
  • -u user:用來設定某個用戶的crontab服務,例如,“-u ixdba”表示設定ixdba用戶的crontab服務,此參數一般有root用戶來運行。

時間格式如下:

f1 f2 f3 f4 f5 program
  • 其中 f1 是表示分鍾,f2 表示小時,f3 表示一個月份中的第幾日,f4 表示月份,f5 表示一個星期中的第幾天。program 表示要執行的程序。
  • 當 f1 為 * 時表示每分鍾都要執行 program,f2 為 * 時表示每小時都要執行程序,其餘類推
  • 當 f1 為 a-b 時表示從第 a 分鍾到第 b 分鍾這段時間內要執行,f2 為 a-b 時表示從第 a 到第 b 小時都要執行,其餘類推
  • 當 f1 為 */n 時表示每 n 分鍾個時間間隔執行一次,f2 為 */n 表示每 n 小時個時間間隔執行一次,其餘類推
  • 當 f1 為 a, b, c,... 時表示第 a, b, c,... 分鍾要執行,f2 為 a, b, c,... 時表示第 a, b, c...個小時要執行,其餘類推
* * * * * - - - - - | | | | | | | | | +----- 星期中星期幾 (0 - 7) (星期天 0) | | | +---------- 月份 (1 - 12) | | +--------------- 一個月中的第幾天 (1 - 31) | +-------------------- 小時 (0 - 23) +------------------------- 分鍾 (0 - 59)

使用者也可以將所有的設定先存放在文件中,用 crontab file 的方式來設定執行時間。

在以上各個字段中,還可以使用以下特殊字符:

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

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

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

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

二,實例

(00 23 * * *--每晚23時執行)

(00 17-19 * * * --每晚17-19時執行)

(*/5 * * * *--每隔五分鍾執行一次)

(30 3,12 * * *--每天凌晨三點半和中午12點半執行一次)

(30 8-18/2 * * * --早上八點半到下午六點半每隔兩個小時執行一次)

(45 4 1,10,22 * *--每月的1日10日22日的凌晨4點45分執行)

(10 1 * * 6,0—每周六周日的凌晨1點十分執行)

(* 23,00-07/1 * * *--每天23點,凌晨12點到早晨7點每小時每一分鍾執行一次)

(5月5號上午九點執行:00 09 05 05 *)

(每周日,上午9:30執行:30 09 * * 0)

注意:周和日不要同時用,否則可能達不到想要的效果

三.  crontab定時任務生產應用問題7箴言

1、   系統環境變量問題

 Crontab執行shell只能識別為數不多的系統環境變量,一般用戶定義的普通變量是無法識別的,如果在編寫腳本中需要使用這些變量,最好使用export重新聲明下該腳本才能正常執行。

2、   定時任務要用絕對路徑

Crontab執行shell時,如果shell路徑是相對路徑或者shell里含有的絕對路徑,此時 就會找不到文件。

3、  腳本權限問題加/bin/sh

要保證crontab的執行者有訪問shell腳本所在的目錄並且執行此shell腳本的權限,最佳的方法就是執行腳本前加/bin/sh,否則有可能因為忘了為腳本設定執行權限,而無法完成任務。

4、 時間變量問題用反斜線

“%”號在crontab任務配置中被認為是newline。需要用“\”來轉義。Crontab任務命令中,如果有“date+%Y%m%d”,必須替換為  “date+\%Y\%m\%d”

5、 >/dev/null2>&1問題

當定時任務在你所指定的時間執行,系統會寄信給你,顯示該程序執行的內容,若系統未開啟郵件服務就會導致郵件臨時目錄/var/spool/clientqueue碎文件件逐漸增加,wei此命令為了防止占滿inode.   

6、  定時任務定時規范之前加注釋

寫定時任務加注釋,什么人物,什么時間,因為什么事,干了什么,都要記得清清楚楚。

7、  避免不必要的程序及命令的輸出

在開發定時任務程序和腳本時,在調試好腳本程序后,應盡量把DEBUG及命令輸出的內容信息屏蔽掉,如果需要,可指向到定時日志文件里,以避免多余的系統垃圾。    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM