利用crontab定製自己的定時任務

命令簡介


crontab-操作每個用戶的守護程序和該執行的時間表。


部分參數說明

crontab file [-u user]-用指定的文件替代目前的crontab。

crontab-[-u user]-用標準輸入替代目前的crontab.

crontab-1[user]-列出用戶目前的crontab.

crontab-e[user]-編輯用戶目前的crontab.

crontab-d[user]-刪除用戶目前的crontab.

crontab-c dir- 指定crontab的目錄。

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只有USERHOMESHELL這三個環境變量。

所以就在自己的crontab -e 中find mv cp 操作是被靜止的

你可以讓他執行一個腳本,讓他自動執行一個.sh文件

15 * * * * /home/zhifeifeng/Desktop/back.sh

mkdir -p /home/zhifeifeng/Desktop/data_back mkdir -p /home/zhifeifeng/Desktop/data_back/`date -I` cp /home/zhifeifeng/Desktop/data/report_`date +%H` /home/zhifeifeng/Desktop/data_back/`date -I`


注意這裏我們用到了 `date XXX`表示一個當前日期的東西

mv oldfile `date +%Y-%m-%d` mv oldfile `date -I`



cron是一個linux下的定時執行工具,可以在無需人工干預的情況下運行作業。由於Cron 是Linux的內置服務,但它不自動起來,可以用以下的方法啓動、關閉這個服務:
/sbin/service crond start //啓動服務
/sbin/service crond stop //關閉服務
/sbin/service crond restart //重啓服務
/sbin/service crond reload //重新載入配置

1.crontab命令選項:
-u指定一個用戶,
-l列出某個用戶的任務計劃,
-r刪除某個用戶的任務,
-e編輯某個用戶的任務
2.cron文件語法:
分     小時   日       月       星期     命令
0-59   0-23   1-31   1-12     0-6     command     (取值範圍,0表示週日一般一行對應一個任務)

3.記住幾個特殊符號的含義:
“*”代表取值範圍內的數字,
“/”代表”每”,
“-”代表從某個數字到某個數字,
“,”分開幾個離散的數字

任務調度設置文件的寫法
可用crontab -e命令來編輯,編輯的是/var/spool/cron下對應用戶的cron文件,也可以直接修改/etc/crontab文件
具體格式如下:
Minute Hour Day Month Dayofweek   command
分鐘     小時   天     月       天每星期       命令
每個字段代表的含義如下:
Minute             每個小時的第幾分鐘執行該任務
Hour               每天的第幾個小時執行該任務
Day                 每月的第幾天執行該任務
Month             每年的第幾個月執行該任務
DayOfWeek     每週的第幾天執行該任務
Command       指定要執行的程序
在這些字段裏,除了“Command”是每次都必須指定的字段以外,其它字段皆爲可選字段,可視需要決定。對於不指定的字段,要用“*”來填補其位置。
舉例如下:
5       *       *           *     *     ls             指定每小時的第5分鐘執行一次ls命令
30     5       *           *     *     ls             指定每天的 5:30 執行ls命令
30     7       8         *     *     ls             指定每月8號的7:30分執行ls命令
30     5       8         6     *     ls             指定每年的6月8日5:30執行ls命令
30     6       *           *     0     ls             指定每星期日的6:30執行ls命令[注:0表示星期天,1表示星期1,以此類推,也可以用英文來表示,sun表示星期天,mon表示星期一等。]
30     3     10,20     *     *     ls     每月10號及20號的3:30執行ls命令[注:“,”用來連接多個不連續的時段]
25     8-11 *           *     *     ls       每天8-11點的第25分鐘執行ls命令[注:“-”用來連接連續的時段]
*/15   *       *           *     *     ls         每15分鐘執行一次ls命令 [即每個小時的第0 15 30 45 60分鐘執行ls命令 ]
30   6     */10         *     *     ls       每個月中,每隔10天6:30執行一次ls命令[即每月的1、11、21、31日是的6:30執行一次ls命令。 ]
每天7:50以root 身份執行/etc/cron.daily目錄中的所有可執行文件
50   7       *             *     *     root     run-parts     /etc/cron.daily   [ 注:run-parts參數表示,執行後面目錄中的所有可執行文件。

添加後保存的路徑是 /var/spool/cron,可以用vi查看修改,這個不難

 

 

一句話總結crontab(指這個應用、這個機制)的作用:”run this command at this time on this day”,在指定的日期、時間,運行指定的命令。下面是Linux 上crontab手冊中的知識點,小結如下:

1. crontab文件“正式行”的開始

空行、以空格或者“tab”開行的行,被cron(daemon)忽略。

以#開始的行,作爲註釋被cron(daemon)忽略。

“註釋”不允許與“命令”放在同一行(作爲命令的註釋),會被作爲“第六段”,被cron(daemon)執行。

同樣的,也不能放在設置環境變量的同一行。

2. 在crontab文件中指定環境變量

設置變量使用

name = value

這樣的格式,”=”號左右的空格不是必須的。

幾個變量默認已經被設置,比如:

SHELL=/bin/sh
HOEM=/home/nnix
LOGNAME=nnix

其中SHELL和HOME可以重新設定,LOGNAME則不可(大概跟確定crontab文件的位置有關)。

默認,crontab會把執行的輸出發送給crontab的所有者,除非重新設定變量:

MAILTO=other_or_email

另外,當crontab發送輸入時的郵件編碼,可以通過設置變量 CONTENT_TYPE 和 CONTENT_TRANSFER_ENCODING 來使用正確的編碼來發送郵件。

3. crontab 文件的分段

依次分別是

  • 分(0-59)
  • 時(0-23)
  • 日(1-31)
  • 月(1-23,或者英文名)
  • 周(0-7,或者英文名,0和7均表示週日)
  • 要執行的內容   

4. 前五段:時間和日期

1)表示任意:* 號表示 “任意”(first-last)。

2)指定數字,表示指定的時間。

3)指定段,表示“開始-結束”內包含的數:比如3-6,表示3,4,5,6

4)指定列表:比如 “1,2,3,4″,”0-4,8-12″

5)指定“步長”:8-14/2 表示8,10,12,14

5. 模糊的第六段:

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

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

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

6. 衝突的邏輯

日期可以用月限定,也可以用“星期”指定,如果兩個段有衝突(比如這兩段不同時爲“*”),那麼,第六段的命令將在匹配任何一個的情況下運行,比如

“30 4 1,15 * 5″,將在每月的1號和15號 加 每個週五,上午4:30運行。

7. crontab文件中的神密符號“%”

可能會遇到的一個問題是,在第六段中需要使用date生成日誌文件名,比如:

0   4   *   *   *   /opt/cron/mysql_dump.sh    > /srv/logs/`date +%y-%m-%d`.dump.log

這時會發現crontab怎麼也不運行這個mysql_dump.sh,也看不到有日誌生成。這是因爲在crontab文件中,”%”是有特殊含義的。假如不需要“%”的特殊作用,需要使用轉義符轉義。上面應該寫成:

0   4   *   *   *   /opt/cron/mysql_dump.sh    > /srv/logs/`date +\%y-\%m-\%d`.dump.log

“%”在crontab文件中,有“結束命令行”、“換行”、“重定向”的作用,比如:

0  22  * * 1-5  mail -s “It’s 10:00 pm” joe%Joe,%%Where are your kids?%

將會在週一至週五的22:00發送一分內容爲:

Joe,<換行>
<換行>
Where are your kids?<換行>

8. 不能理解的特殊用法

       @reboot    :    Run once, at startup.

發佈了39 篇原創文章 · 獲贊 0 · 訪問量 3492
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章