crontab介紹 + 小示例 + crontab不執行的緣由

轉自:http://blog.csdn.net/ustcgy/article/details/5275096java

1.Cron的啓動與關閉

因爲Cron是Linux的內置服務,能夠用如下的方法啓動.關閉這個服務:linux

/sbin/service crond start //啓動服務shell

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

/sbin/service crond restart //重啓服務編輯器

/sbin/service crond reload //從新載入配置測試

2.Cron配置文件

2.1全局配置文件

crontab在/etc目錄下面存在cron.hourly,cron.daily,cron.weekly,cron.monthly,cron.d五個目錄和 crontab,cron.deny二個文件.url

cron.daily是天天執行一次的job,cron.weekly是每一個星期執行一次的job.cron.monthly是每個月執行一次的 job,cron.hourly是每一個小時執行一次的job.cron.d是系統自動按期須要作的任務,可是又不是按小時,按天,按星期,按月來執行的,那麼就放在這個目錄下面..net

/etc/crontab文件通常以下:命令行

01 * * * * root run-parts /etc/cron.hourlyrest

02 4 * * * root run-parts /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.monthly

咱們可在此文件中添加本身須要的cron job.

/etc/cron.deny文件就是用於控制不讓哪些用戶使用Crontab的功能.

2.2用戶配置文件

每一個用戶都有本身的cron配置文件,經過crontab -e 就能夠編輯,通常狀況下咱們編輯好用戶的cron配置文件保存退出後,系統會自動就存放於/var/spool/cron/目錄中,文件以用戶名命名.

linux的cron服務是每隔一分鐘去讀取一次/var/spool/cron,/etc/crontab,/etc/cron.d下面全部的內容.

3.Cron命令格式

crontab [ -u user ] 文件

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

-u:指定某一用戶

-e:執行文字編輯器來設定用戶(當前用戶或指定用戶)時程表,內定的文字編輯器是vi.

-r:刪除用戶時程表.

-l:列出用戶時程表.

4.Cron文件格式

*  *  *  *  *  command

分 時 日 月 周  命令

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

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

第3列表示日期1~31

第4列表示月份1~12

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

第6列要運行的命令

5.Cron文件使用說明

5.1 通常狀況

當f1 爲 * 時表示每分鐘都要執行 program,f2 爲 * 時表示每小時都要執行程序,其他類推.

* * * * * /bin/usershell  天天每分鐘執行一次/bin/usershell

當f1 爲 a-b 時表示從第 a 分鐘到第 b 分鐘這段時間內要執行,f2 爲 a-b 時表示從第 a 到第 b 小時都要執行,其他類推.

0-12 * * * * /bin/usershell  天天每小時從0到12分鐘每分鐘執行一次/bin/usershell

當f1 爲 */n 時表示每 n 分鐘個時間間隔執行一次,f2 爲 */n 表示每 n 小時個時間間隔執行一次,其他類推.

* */2 * * * /bin/usershell  天天每2小時執行一次/bin/usershell

當f1 爲 a, b, c,... 時表示第 a, b, c,... 分鐘要執行,f2 爲 a, b, c,... 時表示第 a, b, c...個小時要執行,其他類推.

* 1,3,5,7 * * * /bin/usershell  天天每逢1,3,4,7點執行一次/bin/usershell

5.2. 衝突邏輯

日期能夠用月限定,也能夠用「星期」指定,若是兩個段有衝突,那麼,第六段的命令將在匹配任何一個的狀況下都運行,好比

"30 4 1,15 * 5",將在每個月的1號和15號加每一個週五,上午4:30運行.

5.3. 符號"%"

"%"在Cron文件中,有"結束命令行","換行","重定向"的做用,假如不須要"%"的特殊做用,須要使用轉義符轉義.

5.4. @reboot

這個不須要理解,爲了達到在開機後運行,且只運行一次的目的.除了這個,也沒法經過前五段的設置來實現. @annually也是這個功能.

至於@yearly,@monthly等等其實均可以用上面的五段來設置.

而後我本身寫了一個小例子作了下測試:

使用crontab -e進行編輯,內容爲:

*/2 * * * * echo "i am crontab" >> /home/zhang/hello
```

這樣隔兩分鐘就會往hello這個文件裏寫i am crontab

我本身寫了一個腳本task.sh,直接運行task.sh時能夠運行,但是加到crontab裏就有運行了,後來我查看了網上的解決方法,終於解決了,先來看一下我原來寫的task.sh腳本吧:

```
#!/bin/sh
java -jar offergateway.biz.offer-1.0-SNAPSHOT.jar
```


crontab定時任務的寫法爲:

```
* * * * *  /task.sh
```

後來我查了網上說要運行crontab,必須使用絕對路徑,而後我把路徑都改爲絕對路徑了。
在crontab的執行環境變量中,沒有相應用戶設置的環境變量,你須要手動設置一下環境變量,才能讓它生效。因而我把上面的腳本改爲:
```
#!/bin/sh
. /etc/profile
java -jar /home/zhang/offergateway.biz.offer-1.0-SNAPSHOT.jar
```

crontab也改爲絕對路徑:

```
* * * * *  sh /home/zhang/task.sh
```

哈哈,成功了~~happy~~
相關文章
相關標籤/搜索