crontab計劃任務

本文主要內容:如何使用crontab設置定時任務,並給出相關實例。java


crontab介紹

crond是linux平臺下實現計劃任務的一項服務。crontab只是一個文件,提供給crond計劃任務的配置文件。先來看看這個配置文件:linux

cat /etc/crontabshell

crontab定時任務格式說明

  • 第一行:SHELL變量指定了系統要使用哪一個shell,這裏是bash;vim

  • 第二行:PATH變量指定了系統執行命令的路徑;bash

  • 第三行:MAILTO變量指定了crond的任務執行信息將經過電子郵件發送給root用戶,若是MAILTO變量的值爲空,則表示不發送任務執行信息給用戶。rest

圖中已經描述得比較清楚了,crontab的語法格式就是用5個 * 表示定時任務的執行時間:分別是:分鐘、小時、天、月、周。code

minute的取值範圍是 0-59 hour的取值範圍是0-23 day的取值範圍是1-31 mouth的取值範圍是1-12 day of week 的取值範圍是 0-6 / sun mon tue wed thu fri satorm

還可使用如下特殊字符:blog

  • 星號( * ):表明全部可能的值,例如:month字段若是是星號,則表示在知足其它字段的制約條件後每個月都執行該命令操做。
  • 逗號( , ):能夠用逗號隔開的值指定一個列表範圍,例如,「1,2,5,7,8,9」 中槓(-):能夠用整數之間的中槓表示一個整數範圍,例如「2-6」表示「2,3,4,5,6」 。
  • 正斜線(/):能夠用正斜線指定時間的間隔頻率,例如「0-23/2」表示每兩小時執行一次。同時正斜線能夠和星號一塊兒使用,例如 */10,若是用在minute字段,表示每十分鐘執行一次。

crontab經常使用命令

example:crontab

crontab -e 進入vim編輯一個計劃任務;

crontab -l 列出當前用戶計劃任務,每一行表明一個計劃任務。

  • -u user:用來設定某個用戶的crontab服務;

  • -e:編輯某個用戶的crontab文件內容。若是不指定用戶,則表示編輯當前用戶的crontab文件。

  • -l:顯示某個用戶的crontab文件內容,若是不指定用戶,則表示顯示當前用戶的crontab文件內容。

  • -r:從/var/spool/cron目錄中刪除某個用戶的crontab文件,若是不指定用戶,則默認刪除當前用戶的crontab文件。

  • -i:在刪除用戶的crontab文件時給確認提示。

能夠執行man crontab查看文檔。注意計劃任務寫完了以後要重啓crond服務。

crontab實例分析

0 */2 * * * . /etc/profile; /bin/sh /usr/tmp/excute.sh

說明:

  • 0 */2 * * * 表明沒兩個小時執行一次,分鐘位置爲0。每兩個小時執行一次,每一個小時的第0分鐘執行任務,若是分鐘位置爲*,表達的意思是每兩個小時執行,而且每分鐘執行一次。
  • . /etc/profile 表示source環境變量,至關於source /etc/profile,注意 . 的後面是有空格的,. 至關因而一個命令了。
  • /bin/sh 指定shell類型。
  • /usr/tmp/excute.sh 指定計劃任務須要執行的shell腳本。注意最好寫全路徑。

須要注意的問題

在crontab文件中定義多個調度任務時,須要特別注環境變量的設置,由於咱們手動執行某個任務時,是在當前shell環境下進行的,程序固然能找到環境變量,而系統自動執行任務調度時,是不會加載任何環境變量的,所以,就須要在crontab文件中指定任務運行所需的全部環境變量,這樣,系統執行任務調度時就沒有問題了。不要假定cron知道所須要的特殊環境,它其實並不知道。因此你要保證在shelll腳本中提供全部必要的路徑和環境變量,除了一些自動設置的全局變量。因此注意以下3點:

  • 腳本中涉及文件路徑時寫全局路徑;

  • 腳本執行要用到java或其餘環境變量時,經過source命令引入環境變量,如:

cat start_cbp.sh
!/bin/sh
source /etc/profile
export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
/usr/local/jboss-4.0.5/bin/run.sh -c mev &
  • 當手動執行腳本OK,可是crontab不執行時,極可能是環境變量惹的禍,可嘗試在crontab中直接引入環境變量解決問題。如:
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh

crontab具體實例

#實例1:每1分鐘執行一次Command
* * * * * Command


#實例2:每小時的第3和第15分鐘執行
3,15 * * * * Command


#實例3:在上午8點到11點的第3和第15分鐘執行
3,15 8-11 * * * Command


#實例4:每隔兩天的上午8點到11點的第3和第15分鐘執行
3,15 8-11 */2  *  * Command


#實例5:每週一上午8點到11點的第3和第15分鐘執行
3,15 8-11 * * 1 Command


#實例6:每晚的21:30重啓smb
30 21 * * * /etc/init.d/smb restart


#實例7:每個月一、十、22日的4 : 45重啓smb
45 4 1,10,22 * * /etc/init.d/smb restart


#實例8:每週6、週日的1 : 10重啓smb
10 1 * * 6,0 /etc/init.d/smb restart


#實例9:天天18 : 00至23 : 00之間每隔30分鐘重啓smb
0,30 18-23 * * * /etc/init.d/smb restart


#實例10:每星期六的晚上11 : 00 pm重啓smb
0 23 * * 6 /etc/init.d/smb restart
相關文章
相關標籤/搜索