程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> crontab定時任務配置記錄,crontab任務

crontab定時任務配置記錄,crontab任務

編輯:關於PHP編程

crontab定時任務配置記錄,crontab任務


一、前言

  今天簡單記錄下crontab的配置

二、crontab目錄 

/etc/crontab 文件
    這是系統運行的調度任務
 
/var/spool/cron 目錄
    用戶自定義的crontab任務放在此目錄下
 
ls –lrt /etc/cron*
   /etc/cron.deny     表示不能使用crontab命令的用戶
   /etc/cron.allow     表示能使用crontab命令的用戶
   默認情況下,cron.allow不存在,如果都存在,cron.allow優先

三、crontab命令語法

具體可 crontab --help 或者 man crontab|more

crontab –l   //查看當前用戶的定時任務 
crontab –e  //編輯當前用戶的定時任務
crontab –r  //刪除當前用戶的定時任務

四、crontab任務格式

59 23 * * *  /home/xxx/crontab/test.sh > /dev/null  2>&1 &

前6列暫且用C1 - C6表示

C1 分    (1-59)
C2 時    (1-23,0表示子夜)
C3 日    (1-31)
C4 月    (1-12)
C5 星期   (0-6,0表示星期天,1表示星期一,以此類推)
C6 要運行的命令

前5列表示 命令執行的頻率,最小頻率是每分鐘一次,其中Cn的值可用四種形式表示:
*  ,  */n  , T1-T2 , a,b,c  

當C1 為 * 時,表示每分鐘都要執行命令
當C1 為 */n時,表示每隔n分鐘執行一次命令
當C1 為 T1-T2時,表示從 T1分鐘 到 T2分鐘時間內都要執行命令
當C1 為 a,b,c 時,表示第 a,b,c 分鐘都要執行命令


示例調用:

12  12 * * *  /home/xxx/crontab/test.sh >/dev/null 2>&1 
表示每天的12點12分 執行腳本

*/2 *  *  *  *  /home/xxx/crontab/test.sh >/dev/null 2>&1
表示每隔2分鐘 執行一次腳本

0 23 * * 1-5  /home/xxx/crontab/test.sh >/dev/null 2>&1
表示每周一到周五的23點 執行一次腳本

0 19 * * 0  mail -s "xxx" [email protected] < /tmp/maildata
表示每周日的19點 發送郵件到 [email protected]

五、關於命令的說明

關於命令中 /dev/null 2>&1 的解釋

0  表示鍵盤輸入
1  表示標准輸出
2  表示錯誤輸出

1.創建test.sh,內容如下

#! /bin/bash
echo "time is " `date`

2.添加定時任務

* * * * *    /home/xxx/crontab/test.sh > /home/xxx/crontab/test.log &    默認是1,和下面方法一致
* * * * *   /home/xxx/crontab/test.sh 1> /home/xxx/crontab/test.log &
* * * * *   /home/xxx/crontab/test.sh > /home/xxx/crontab/test.log  2>&1 &

3.說明

1代表,標准輸出,所以上述命令會將腳本的輸出結果,輸出到後面指定的log文件中,而不是打印到屏幕;
2代表,錯誤輸出,&1表示文件的描述,這裡表示腳本執行的錯誤信息重定向到1(標准輸出)
而1已經重定向到指定的log文件中,所以信息都會輸出到log文件
不能寫成 2>1 ,缺少&,會認為是錯誤信息輸出到名稱為 1 文件中

六、注意事項

1.shell中需設置必要的環境變量
  crontab的環境變量默認不包含系統當前用戶的環境,所以需添加必要的環境變量

2.盡量采用完整路徑方法,避免使用相對路徑

3.避免腳本的重復執行
  if(exec("ps -ef |grep 'php'|grep 'updateScript'|grep -v 'grep' |wc -l ") > 2){
    die();  
  }

  grep -v 'grep'    表示結果去過濾掉 grep 那一行
  wc -l             表示統計滿足條件的行數
  這樣就可以判斷 php進程中,名為 updateScript 的腳本 是否已經執行了

七、參考資料

http://www.cnblogs.com/kerrycode/p/3238346.html
http://www.cnblogs.com/hazir/p/sudo_command.html

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved