Linux下crontab命令的用法

cron來源於希臘單詞chronos(意爲“時間”),是linux系統下一個自動執行指定任務的程序。例如,你想在每晚睡覺期間創建某些文件或文件夾的備份,就可以用cron來自動執行。

 

服務的啓動和停止

cron服務是linux的內置服務,但它不會開機自動啓動。可以用以下命令啓動和停止服務:

Linux代碼  收藏代碼
  1. /sbin/service crond start  
  2. /sbin/service crond stop  
  3. /sbin/service crond restart  
  4. /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/ 下)。

 

  • file 使用file文件的內容作爲某個用戶的cron服務配置,內容會複製到cron服務的配置文件中
  • -u 設定某個用戶的cron服務配置,一般root 用戶在執行這個命令的時候需要此參數
  • -l   列出某個用戶cron服務配置
  • -r  刪除某個用戶的cron服務配置
  • -e  編輯某個用戶的cron服務配置,當指定crontab  不存在時新建,將使用vi打開配置文件進行編輯保存後退出,文件語法見後
  • crontab –v   顯示上一次編輯的時間(只在某些操作系統上可用)

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

 

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

 

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

 

 

語法說明

 

每行表示一個指令,即表示一項計劃任務;每行由空格分隔的六個部分組成,前5部分表示定時任務的執行時間,剩餘部分爲定時任務要執行的命令,格式如下:

 

分 小時 日 月 星期 命令
Minute  Hour  Day  Month  DayOfWeek  command

  • Minute 每個小時的第幾分鐘執行該任務,0-59
  • Hour 每天的第幾個小時執行該任務,0-23
  • Day 每月的第幾天執行該任務,1-31
  • Month 每年的第幾個月執行該任務,1-12
  • DayOfWeek 每週的第幾天執行該任務,0-6,0表示週日
  • Command 指定要執行的程序

以上前五項可使用以下四個特殊符號:

  • *  表示所有數值,如第一位使用* 表示每分鐘
  • /  表示每,如第一位使用 */5 表示每5分鐘
  • -  表示數值範圍,如第二位使用2-4表示2點到4點
  • ,  表示離散的多個數值,如第2位使用6,8 表示6點和8點
  • 指定“步長”:8-14/2 表示8,10,12,14
  • 指定列表:比如 “1,2,3,4″,”0-4,8-12″

在每行的六項字段中,除了Command是每次都必須指定的字段以外,其它字段皆爲可選字段,可視需要決定。對於不指定的字段,要用“*”來填補其位置。

 

1)除去前五段,從第六段開始到換行符或者“%”爲止,爲要執行的命令。

2)默認第六段將被/bin/sh執行,除非在crontab文件中指定了非/bin/sh的SHELL變量。

3)第六段中的”%”號,除非前面加”\”號轉交,否則,“%”號將結束命令行、換行的意義,並且其後的內容會被做爲標準輸入發送給前面的命令。

 

舉例如下:

C代碼  收藏代碼
  1. Every minute (* * * * *)  
  2. Every 5 minutes (*/5 * * * *)  
  3. Twice an hour (0,30 * * * *)  
  4. Once an hour (0 * * * *)  
  5. Twice a day (0 0,12 * * *)  
  6. Once a day (0 0 * * *)  
  7. Once a week (0 0 * * 0)  
  8. 1st and 15th (0 0 1,15 * *)  
  9. Once a month (0 0 1 * *)  
  10. Once a year (0 0 1 1 *)  

 

Linux代碼  收藏代碼
  1. 5      *      *     *     *    ls  > /var/log.txt           指定每小時的第5分鐘執行一次ls命令,並將結果保存到/var/log.txt文件  
  2. 30    5      *      *     *     ls    指定每天的 5:30 執行ls命令  
  3. 30    7      8      *     *     ls    指定每月8號的730分執行ls命令  
  4. 30    5      8      6     *     ls    指定每年的68530執行ls命令  
  5. 30    6      *      *     0     ls    指定每星期日的6:30執行ls命令 [注:0表示星期天,1表示星期1,以此類推,也可以用英文來表示,sun表示星期天,mon表示星期一等。]  
  6. 30    3     10,20   *     *     ls    每月10號及20號的330執行ls命令 [注:“,”用來連接多個不連續的時段]  
  7. 25    8-11   *      *     *     ls    每天8-11點的第25分鐘執行ls命令 [注:“-”用來連接連續的時段]   
  8. */15  *      *      *     *     ls    每15分鐘執行一次ls命令 [即每個小時的第0 15 30 45 60分鐘執行ls命令]  
  9. 30    6     */10    *     *     ls    每個月中,每隔106:30執行一次ls命令[即每月的1112131日是的630執行一次ls命令。]  

 

cron配置文件

使用crontab命令添加完成計劃任務後會在/var/spool/cron目錄中生成一個用戶名字的文件,文件裏面就是你的計劃任務,cron服務會每分鐘讀取一次/var/spool/cron 中的文件。

 

系統計劃任務

還有一種方法可以添加計劃任務,編輯/etc/crontab (cron服務每分鐘也讀取一次/etc/crontab文件。

用crontab配置是針對某個用戶的,而編輯/etc/crontab是針對系統的任務。此文件的文件格式是:

Linux代碼  收藏代碼
  1. SHELL=/bin/bash  
  2. PATH=/sbin:/bin:/usr/sbin:/usr/bin  
  3. MAILTO=root //如果出現錯誤,或者有數據輸出,數據作爲郵件發給這個帳號  
  4. HOME=/ //使用者運行的路徑,這裏是根目錄  
  5. # run-parts  
  6. #每小時執行/etc/cron.hourly內的腳本  
  7. 01   *   *   *   *     root run-parts /etc/cron.hourly  
  8. #每天執行/etc/cron.daily內的腳本   
  9. 02   4   *   *   *     root run-parts /etc/cron.daily  
  10. #每星期執行/etc/cron.weekly內的腳本  
  11. 22   4   *   *   0     root run-parts /etc/cron.weekly  
  12. #每月去執行/etc/cron.monthly內的腳本  
  13. 42   4   1   *   *     root run-parts /etc/cron.monthly  

 

注意”run-parts”這個參數,如果去掉這個參數的話,後面就要寫要運行的某個腳本名,而不是文件夾名。例如:11 2 21 10 * rm -rf /mnt/fb

 

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

Linux代碼  收藏代碼
  1. 12 3 * * * root tar czf /usr/local/backups/daily/etc.tar.gz /etc >> /dev/null 2>&1  
  2. 52 5 * * * root /usr/local/src/analog-5.32-lh/analog >> /dev/null 2>&1  

 

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

字段 說明
1 分鐘(0-59)
2 小時(0-23)
3 日期(1-31)
4 月份(1-12;或英文縮寫Jan、Feb等)
5 周幾(0-6,0爲週日;或單詞縮寫Sun、Mon等)
6 用戶名(執行命令時以此用戶的身份)
7 要執行的命令(路徑)
   

 

現在來看第一行:

Linux代碼  收藏代碼
  1. 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)。運行這行命令將不會產生任何輸出。

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

Linux代碼  收藏代碼
  1. 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 命令。

以下語句可以達到同樣的效果:

Linux代碼  收藏代碼
  1. 30 15 13 Jun Mon * root tar czf /usr/local/backups/daily/etc.tar.gz /etc >> /dev/null 2>&1  

 

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

Linux代碼  收藏代碼
  1. 15 * * * * joey /usr/bin/somecommand >> /dev/null 2>&1  

 

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

如果你想每兩小時 就運行某個程序,可以在小時字段裏使用 */2 。它將會在2點,4點,6點……22點,24點運行。具體語句如下:

Linux代碼  收藏代碼
  1. 0 */2 * * * joey /usr/bin/somecommand >> /dev/null 2>&1  

 

cron語句中還可以使用逗號(,)來指定多個時間。例如你想在每小時的15分和30分 運行某個程序,可以在分鐘字段使用 15,30 :

Linux代碼  收藏代碼
  1. 15,30 * * * * joey /usr/bin/somecommand >> /dev/null 2>&1  

 

如果你想在每月的第一週(即1號到7號)每天的指定時間 運行某個程序,可以在日期字段使用 1-7 :

Linux代碼  收藏代碼
  1. 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),可以使用:

Linux代碼  收藏代碼
  1. 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
  • 刪除計時器設置時要先詢問,使用 crontab -i 交互式模式
  • 以root身份查看/編輯/刪除某用戶的cron配置,在命令後加上 -u USERNAME
  • 配置系統級的任務,編輯 /etc/crontab 文件

 

 

 

ubuntu 重設crontab -e的默認編輯器

 

Java代碼  收藏代碼
  1. sudo select-editor  

 

 

On Gnome-based Ubuntu systems Gnome Scheduled tasks tool (from the gnome-schedule package) inApplications --> System Tools provides a graphical interface with prompting for using Cron. The project website is at http://gnome-schedule.sourceforge.net/; the software is installable from the Software Center or by typing

 

Java代碼  收藏代碼
  1. sudo apt-get install gnome-schedule  

 

in a terminal.

 

來源: https://help.ubuntu.com/community/CronHowto

Java代碼  收藏代碼
  1. [root@localhost ~]# crontab -l                  #查看定時運行的程序  
  2. 59 23 * * * /bin/sh /var/www/database/bak.sh  
  3. 59 3 * * * /bin/sh /var/www/database/mylinux.sh  
  4. 59 5 * * 0 /sbin/reboot  

 

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