linux中crontab 計劃任務

來源:互聯網
上載者:User

本文章來給大家介紹linux中crontab的使用方法及簡單的使用crontab實現計劃任務方法,這個計劃任務有點像windows的計劃任務一樣的哦。

1.作用
使用crontab命令可以修改crontab設定檔,然後該配置由cron公用程式在適當的時

間執行,該命令使用許可權是所有使用者。

2.格式

 代碼如下 複製代碼

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

3.主要參數

-e:執行文字編輯器來設定時程表,內定的文字編輯器是vi。
-r:刪除目前的時程表。
-l:列出目前的時程表。

crontab檔案的格式為“M H D m d cmd”。其中,M代表分鐘(0~59),H代表小時(

0~23),D代表天(1~31),m代表月(1~12),d代表一星期內的天(0~6,0為星

期天)。cmd表示要啟動並執行程式,它被送入sh執行,這個Shell只有USER、HOME、SHELL

三個環境變數。

4.說明

和at命令相比,crontab命令適合完成固定周期的任務。

5.應用執行個體
設定一個定時、週期性系統提示:
[cao @www cao]#crontab -e
此時系統會開啟一個vi編輯器。
如果輸入以下內容:35 17 * * 5 wall "Tomorrow is Saturday I will go CS",
這樣每個星期五17:35系統就會彈出一個終端,提醒星期六可以打打CS了!

用crontab命令實現每天定時的病毒掃描
前面已經介紹了一個簡單的crontab命令操作,這裡看一些更重要的操作。

 代碼如下 複製代碼

30 21 * * * /opt/lampp/lampp restart
#上面的例子表示每晚的21:30重啟lampp。

45 4 1,10,22 * * /opt/lampp/lampp restart
#上面的例子表示每月1、10、22日的4 : 45重啟lampp。

10 1 * * 6,0 /opt/lampp/lampp restart
#上面的例子表示每周六、周日的1 : 10重啟lampp。

0,30 18-23 * * * /opt/lampp/lampp restart
#上面的例子表示在每天18 : 00至23 : 00之間每隔30分鐘重啟lampp。

0 23 * * 6 /opt/lampp/lampp restart
#上面的例子表示每星期六的11 : 00 pm重啟lampp。

* */1 * * * /opt/lampp/lampp restart
#每一小時重啟lampp

* 23-7/1 * * * /opt/lampp/lampp restart
#晚上11點到早上7點之間,每隔一小時重啟lampp

0 11 4 * mon-wed /opt/lampp/lampp restart
#每月的4號與每周一到周三的11點重啟lampp

0 4 1 jan * /opt/lampp/lampp restart
#一月一號的4點重啟lampp

/sbin/service crond start //啟動服務
/sbin/service crond stop //關閉服務
/sbin/service crond restart //重啟服務
/sbin/service crond reload //重新載入配置

 查看、編輯和刪除
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>&152 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 。

crontab命令用於定時執行指定的命令,功能類似Windows下的“任務計劃”,通常用來做一些重複性的工作。

Linux系統的使用者只需將要執行的命令序列加到crontab檔案中,作業系統即會按使用者配置的時間執行這些命令序列。

向crontab檔案裡添加指令之前,需要檢查下crontab服務是否已啟動和是否開機自動啟動:

查看crontab服務狀態:service crond status

手動啟動crontab服務:service crond start

查看crontab服務是否已設定為開機啟動 ,執行命令:ntsysv

開啟服務配置,查看crond服務前的[]是否已選中(打*號為選中),若未選中則選中該服務。

使用命令:crontab -l 查看目前使用者已配置的任務計劃

編輯crontab檔案命令:crontab -e

也可以不使用“crontab -e”命令建立crontab設定檔,其他任何文字編輯器編寫命令序列,比如檔案名稱為“abc.cron”,然後使用命令:“crontab abc.cron”將命令序列添加到crontab中。

預設情況下,系統所有使用者都可以使用crond服務。如需對crond服務的使用加限制,可以使用設定檔/etc/cron.allow和 /etc/cron.deny,望文生義,cron.allow是允許使用crond服務的使用者清單,cron.deny裡的使用者則相反

crontab命令的文法格式如下:

格式一:crontab [-u user] file
此命令用於添加一個新的crontab 檔案

-u 如果使用該選項,指定使用者的 crontab 檔案將被修改,反之則修改執行 crontab 命令使用者的 crontab 檔案。

格式二:crontab [-u user] [ -e | -l | -r ]

-l 在標準輸出上顯示當前的crontab。
-r 刪除當前的crontab檔案。
-e 使用系統編輯器編輯當前的crontab檔案。當編輯完成後,檔案將自動安裝。這種方式很方便,修改後即時生效。

廢話了半天,這裡才是重點。crontab 檔案中命令格式如下:

minute hour day-of-month month-of-year day-of-week commands

即:“分 時 日 月 周 命令 ”,共計6段,前5段都是時間,最後一段才是你要定期執行的指令。每段之間使用空格或者定位字元分隔。

來看一下前5段即日期和時間的取值範圍 :

1,分鐘[00-59]
2,小時[00-23]
3,日[01-31]
4,月份[01-12]
5,周[0-6] ;注意,這裡的0表示周日

OK,來個簡單點的例子,每天早上6點半起床:

30 06 * * * echo "Get Up Now !" >> /tmp/test.txt

將上面這條指令另到crontab檔案,系統每天上午6點半會向/tmp/test.txt檔案裡添加一行“Get Up Now !”。

上面這條指令裡使用了特殊符號“*”,與SQL查詢語句“SELECT * FROM TAB”裡的“*”一樣是“任何”的意思,即代表當前段取值範圍內的所有數字,如第3段上的“*”代表[01-31]日,第4段上的“*”代表[01-12]月。

特殊符號除了“*”號還有“/”、“-”、“,”:

/ 代表“每”的意思,如“/5”表示每5個單位;
- 用於表示一個範圍,如“[1-10]”表示從1到10;
, 用於表示若干離散的數字,如“5,15,25”

比如命令:[0-59]/5 23 * * * /sbin/shutdown -h now

表示每晚11點開始,每5分鐘嘗試一次關機,幫你養成早睡早起的好習慣,呵呵。機器關掉後,如果嘗試開機,則到5的倍數時會再次關掉,酷似Windows 2000中了衝擊波病毒。

00,10,20,30,40,50 * * * * echo "10 minutes has passed !" >> /tmp/test.txt

每小時的00分、10分、20分、30分、40分、50分向檔案“/tmp/test.txt”寫一行又十分鐘過去嘍

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.