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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章