Linux crontab詳解

jopen 12年前發布 | 28K 次閱讀 Linux crontab

Linux crontab詳解  cron來源于希臘單詞chronos(意為“時間”),是linux系統下一個自動執行指定任務的程序。例如,你想在每晚睡覺期間創建某些文件或文件 夾的備份,就可以用cron來自動執行。服務的啟動和停止cron服務是linux的內置服務,但它不會開機自動啟動。可以用以下命令啟動和停止服務:

/sbin/service crond start

/sbin/service crond stop

/sbin/service crond restart

/sbin/service crond reload

以上1-4行分別為啟動、停止、重啟服務和重新加載配置。

要把cron設為在開機的時候自動啟動,在 /etc/rc.d/rc.local 腳本中加入 /sbin/service crond start 即可。

查看、編輯和刪除cron把命令行保存在crontab(cron table)文件里,這個文件通常在 /etc 目錄下。每個系統用戶都可以有自己的crontab(在 /var/spool/cron/ 下)。

要查看當前用戶的crontab,輸入 crontab -l;

要編輯crontab,輸入 crontab -e;

要刪除crontab,輸入 crontab -r。

如當前是root身份,要查看/編輯/刪除/某用戶的crontab,只需在相應的命令后加上 -u USERNAME(如 crontab -e -u USERNAME)即可。

crontab文件的默認編輯器是vi,可以輸入 export VISUAL=’editor’ 更改默認編輯器。

cron服務每分鐘不僅要讀一次 /var/spool/cron 目錄內的所有文件,還需要讀一次 /etc/crontab 文件。配置這個文件也能讓cron執行任務。使用crontab命令是對用戶級任務的配置,而編輯 /etc/crontab 文件是對系統級任務的配置。

語法說明

以下是兩個cron語句的例子(在 /etc/crontab 文件里)。前者用來晚間備份 /etc 目錄,后者運行Analog程序處理服務器的統計信息。

12 3 * * * root tar czf /usr/local/backups/daily/etc.tar.gz /etc >> /dev/null 2>&1

52 5 * * * root /usr/local/src/analog-5.32-lh/analog >> /dev/null 2>&1

以下是cron語句中的字段與字段說明:

字段說明

1分鐘(0-59)

2小時(2-24)

3日期(1-31)

4月份(1-12;或英文縮寫Jan、Feb等)

5周幾(0-6,0為周日;或單詞縮寫Sun、Mon等)

6用戶名(執行命令時以此用戶的身份)

7要執行的命令(路徑)

現在來看第一行:12 3 * * * root tar czf /usr/local/backups/daily/etc.tar.gz /etc >> /dev/null 2>&1

這條語句將在每天的凌晨3點12分(03:12)運行

tar czf /usr/local/backups/daily/etc.tar.gz /etc 命令。>> /dev/null 2>&1

表示把所有標準輸出發送到 /dev/null(linux的回收站),把標準錯誤輸出(2)發送到和標準輸出(1)同樣的地方(即 /dev/null)。運行這行命令將不會產生任何輸出。

這條語句可以變得稍微復雜一點:

30 15 13 6 1 * root tar czf /usr/local/backups/daily/etc.tar.gz /etc >> /dev/null 2>&1

它將在6月13日周一的15:30運行 tar czf /usr/local/backups/daily/etc.tar.gz /etc 命令。

以下語句可以達到同樣的效果:30 15 13 Jun Mon * root tar czf /usr/local/backups/daily/etc.tar.gz /etc >> /dev/null 2>&1

如果你想以用戶joey的身份每小時的第15分鐘運行某個程序,可以使用:

15 * * * * joey /usr/bin/somecommand >> /dev/null 2>&1

其中的星號(*)是通配符,表示cron將忽略這個字段。

如果你想每兩小時就運行某個程序,可以在小時字段里使用 */2。

它將會在2點,4點,6點……22點,24點運行。

具體語句如下:0 */2 * * * joey /usr/bin/somecommand >> /dev/null 2>&1cron

語句中還可以使用逗號(,)來指定多個時間。

例如你想在每小時的15分和30分運行某個程序,可以在分鐘字段使用

15,30:15,30 * * * * joey /usr/bin/somecommand >> /dev/null 2>&1

如果你想在每月的第一周(即1號到7號)每天的指定時間運行某個程序,可以在日期字段使用 1-7:15,30 */2 1-7 * * joey /usr/bin/somecommand >> /dev/null 2>&1

這條語句將在每月的第1-7日每兩小時的15分和30分(02:15,02:30……22: 15,22:30等)運行 /usr/bin/somecommand 命令。

如果你想在每天的16:18執行一個腳本集合,可以把所有要執行的腳本放到一個目錄中(如 /home/username/cron),可以使用:

18 16 * * * root run-parts /home/username/cron >> /dev/null 2>&1

如果你想保存某個程序的輸出結果, 可以把 >> /dev/null 2>&1 替換為 >> /home/user/somecommand.log 2>&1 。

總結

查看當前用戶的cron配置,使用 crontab -l

編輯當前用戶的cron配置,使用 crontab -e

刪除當前用戶的cron配置,使用 crontab -r

以root身份查看/編輯/刪除某用戶的cron配置,在命令后加上 -u USERNAME 配置系統級的任務,編輯 /etc/crontab 文件

Linux crontab詳解

Cron是一個linux下的定時執行工具。

一、Cron 是Linux的內置服務,可以用以下的方法啟動、關閉、重啟服務:

/sbin/service crond start //啟動服務

/sbin/service crond stop //關閉服務

/sbin/service crond restart //重啟服務

/sbin/service crond reload //重新載入配置

你也可以將這個服務在系統啟動的時候自動啟動:

在/etc/rc.d/rc.local這個腳本的末尾加上:

/sbin/service crond start

二、直接用crontab命令編輯

cron服務提供crontab命令來設定cron服務的,以下是這個命令的一些參數與說明:

crontab -u //設定某個用戶的cron服務,一般root用戶在執行這個命令的時候需要此參數

crontab -l //列出某個用戶cron服務的詳細內容

crontab -r //刪除某個用戶的cron服務

crontab -e //編輯某個用戶的cron服務

例:

比如說root查看自己的cron設置:crontab -u root -l

再例如,root想刪除fred的cron設置:crontab -u fred -r

在編輯cron服務時,編輯的內容有一些格式和約定,輸入:crontab -u root -e

進入vi編輯模式,編輯的內容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt

這個格式的前一部分是對時間的設定,后面一部分是要執行的命令,如果要執行的命令太多,可以把這些命令寫到一個腳本里面,然后在這里直接調用這 個腳本就可以了,調用的時候記得寫出命令的完整路徑。時間的設定我們有一定的約定,前面五個*號代表五個數字,數字的取值范圍和含義如下:

分鐘 (0-59)

小時 (0-23)

日期 (1-31)

月份 (1-12)

星期 (0-6)//0代表星期天

除了數字還有幾個個特殊的符號就是”*”、”/”和”-”、”,”,*代表所有的取值范圍內的數字,”/”代表每的意思,”*/5″表示每5個單位,”-”代表從某個數字到某個數字,”,”分開幾個離散的數字。以下舉幾個例子說明問題:

每天早上6點

0 6 * * * echo “Good morning.” >> /tmp/test.txt //注意單純echo,從屏幕上看不到任何輸出,因為cron把任何輸出都email到root的信箱了。

每兩個小時

0 */2 * * * echo “Have a break now.” >> /tmp/test.txt

晚上11點到早上8點之間每兩個小時,早上八點

0 23-7/2,8 * * * echo “Have a good dream:)” >> /tmp/test.txt

每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點

0 11 4 * 1-3 command line

1月1日早上4點

0 4 1 1 * command line

每次編輯完某個用戶的cron設置后,cron自動在/var/spool/cron下生成一個與此用戶同名的文件,此用戶的cron信息都記 錄在這個文件中,這個文件是不可以直接編輯的,只可以用crontab -e 來編輯。cron啟動后每過一份鐘讀一次這個文件,檢查是否要執行里面的命令。因此此文件修改后不需要重新啟動cron服務。

三、編輯/etc/crontab 文件配置cron

cron服務每分鐘不僅要讀一次/var/spool/cron內的所有文件,還需要讀一次/etc/crontab,因此我們配置這個文件也 能運用 cron服務做一些事情。用crontab配置是針對某個用戶的,而編輯/etc/crontab是針對系統的任務。此文件的文件格式是:

SHELL=/bin/bash

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

MAILTO=root //如果出現錯誤,或者有數據輸出,數據作為郵件發給這個帳號

HOME=/ //使用者運行的路徑,這里是根目錄

# run-parts

01 * * * * root run-parts /etc/cron.hourly //每小時執行/etc/cron.hourly內的腳本

02 4 * * * root run-parts /etc/cron.daily //每天執行/etc/cron.daily內的腳本

22 4 * * 0 root run-parts /etc/cron.weekly //每星期執行/etc/cron.weekly內的腳本

42 4 1 * * root run-parts /etc/cron.monthly //每月去執行/etc/cron.monthly內的腳本

大家注意”run-parts”這個參數了,如果去掉這個參數的話,后面就可以寫要運行的某個腳本名,而不是文件夾名了。

————————————–

基本格式 :

* * * * * command

分 時 日 月 周 命令

第1列表示分鐘1~59 每分鐘用*或者 */1表示

第2列表示小時1~23(0表示0點)

第3列表示日期1~31

第4列表示月份1~12

第5列標識號星期0~6(0表示星期天)

第6列要運行的命令

crontab文件的一些例子:

30 21 * * * /usr/local/etc/rc.d/lighttpd restart

上面的例子表示每晚的21:30重啟lighttpd 。

45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart

上面的例子表示每月1、10、22日的4 : 45重啟lighttpd 。

10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart

上面的例子表示每周六、周日的1 : 10重啟lighttpd 。

0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart

上面的例子表示在每天18 : 00至23 : 00之間每隔30分鐘重啟lighttpd 。

0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart

上面的例子表示每星期六的11 : 00 pm重啟lighttpd 。

* */1 * * * /usr/local/etc/rc.d/lighttpd restart

每一小時重啟lighttpd

* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart

晚上11點到早上7點之間,每隔一小時重啟lighttpd

0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart

每月的4號與每周一到周三的11點重啟lighttpd

0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart

一月一號的4點重啟lighttpd

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!