liunx定時執行php腳本

不少時候咱們有但願服務器定時去運行一個腳原本觸發一個操做,好比使用七牛的工具上傳,若是同步文件裏面有新增長一個文件,這個時候咱們能夠提供定時腳本去完成咱們須要的同步命令(七牛的qrsbox工具是自動會同步的,只須要在同步文件夾裏面增長一個文件就會自動監聽上傳)。php

1.安裝crontabshell

[root@CentOS ~]# yum install vixie-cron
[root@CentOS ~]# yum install crontabs
vixie-cron軟件包是cron的主程序; 
crontabs軟件包是用來安裝、卸裝、或列舉用來驅動 cron 守護進程的表格的程序。apache

2.開啓crontab服務vim

service crond start //啓動服務
用如下的方法啓動、關閉這個cron服務: 
service crond start //啓動服務 
service crond stop //關閉服務 
service crond restart //重啓服務 
service crond reload //從新載入配置瀏覽器

查看crontab服務狀態:service crond status 
手動啓動crontab服務:service crond start 
查看crontab服務是否已設置爲開機啓動,執行命令:ntsysv 
加入開機自動啓動: 
chkconfig –level 35 crond onbash

另外順帶介紹下ntsysv和chkconfig命令: 
關於ntsysv命令是類圖形界面管理模式來設置開機啓動,須要先安裝纔可使用,yum install -y ntsysv安裝好以後只須要運行一個ntsysv便可出現一個相似圖像化的管理界面。 
上下鍵:能夠在中間的方框當中,在各個服務之間移動; 
空格鍵:能夠用來選擇你所須要的服務,[*]表示開起啓動; 
tab鍵:能夠在方框、OK、Cancel之間移動; 
[F1]鍵:能夠顯示該服務的說明。服務器

關於chkconfig命令行的形式設置是否開機自啓動或者查詢某個服務6個開機級別的運行狀況。 
設置開機自動啓動crond服務: 
[root@CentOS ~]# chkconfig crond on 
查看各個開機級別的crond服務運行狀況 
[root@CentOS ~]# chkconfig –list crond 
crond 0:關閉 1:關閉 2:啓用 3:啓用 4:啓用 5:啓用 6:關閉 
能夠看到二、三、四、5級別開機會自動啓動crond服務 
取消開機自動啓動crond服務: 
[root@CentOS ~]# chkconfig crond offcurl

3.設置須要執行的腳本 
新增調度任務可用兩種方法: 
1)、在命令行輸入: crontab -e 而後添加相應的任務,wq存盤退出。 
2)、直接編輯/etc/crontab 文件,即vi /etc/crontab,添加相應的任務。 
crontab -e配置是針對某個用戶的,而編輯/etc/crontab是針對系統的任務 
查看調度任務 
crontab -l //列出當前的全部調度任務 
crontab -l -u jp //列出用戶jp的全部調度任務 
刪除任務調度工做 
crontab -r //刪除全部任務調度工做 
直接編輯 vim /etc/crontab ,默認的文件形式以下:工具

查看執行狀況url

tail -f /var/log/cron

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
這個文本解釋的已經比較直觀了,其中 
星號(*):表明全部可能的值,例如month字段若是是星號,則表示在知足其它字段的制約條件後每個月都執行該命令操做。 
逗號(,):能夠用逗號隔開的值指定一個列表範圍,例如,「1,2,5,7,8,9」 
中槓(-):能夠用整數之間的中槓表示一個整數範圍,例如「2-6」表示「2,3,4,5,6」 
正斜線(/):能夠用正斜線指定時間的間隔頻率,例如「0-23/2」表示每兩小時執行一次。同時正斜線能夠和星號一塊兒使用,例如*/10,若是用在minute字段,表示每十分鐘執行一次。

這裏舉幾個例子,基本涵蓋了常見的一些狀況: 
實例1

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     5       8           6     *     ls         指定每一年的6月8日5:30執行ls命令
30     6       *           *     0     ls         指定每星期日的6:30執行ls命令
30     3     10,20         *     *     ls         每個月10號及20號的3:30執行ls命令
25     8-11    *           *     *     ls         天天8-11點的第25分鐘執行ls命令
*/15   *       *           *     *     ls         每15分鐘執行一次ls命令
30     6     */10          *     *     ls         每月中,每隔10天6:30執行一次ls命令
22     4       *           *     *     root     run-parts     /etc/cron.daily
#天天4:22以root身份執行/etc/cron.daily目錄中的全部可執行文件,run-parts參數表示,執行後面目錄中的全部可執行文件。

實例2

#每晚的21:30 重啓apache
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
#每個月一、十、22日的4 : 45重啓apache
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
#每週6、週日的1 : 10重啓apache
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
#天天18 : 00至23 : 00之間每隔30分鐘重啓apache
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
#每星期六的11 : 00 pm重啓apache
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
#晚上11點到早上7點之間,每隔一小時重啓apache
0 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
#每一小時重啓apache
0 */1 * * * /usr/local/etc/rc.d/lighttpd restart
#每個月的4號與每週一到週三的11點重啓apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
#一月一號的4點重啓apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
#每半小時同步一下時間
0/30 * * * * /usr/sbin/ntpdate 210.72.145.44
注意 
* *1 * * * 命令表示是每小時以內的每一分鐘都執行。 
必須指定在每一個小時的第幾分鐘執行,也就是說第一個*號必須改爲一個數值。 
由於*號表示的就是每一分鐘。 
另外小時位的/1和沒有區別,都是每小時一次。 
若是是設置*/2,其實是能被2整除的小時數而不是從定時設置開始2小時後執行,好比9點設的到10點就會執行。

最後可能會遇到下面這個問題 
root用戶下 輸入 crontab -l 顯示 
no crontab for root 例如: 
[root@CentOS ~]# crontab -l 
no crontab for root 
這個問題很是簡單,一樣在 root 用戶下輸入 crontab -e 
按 Esc 按: wq 回車 
在輸入 crontab -l 就沒有問題了 
主要緣由是因爲這個liunx服務器 第一次使用 crontab ,尚未生成對應的文件致使的,執行了 編輯(crontab -e)後 就生成了這個文件

執行PHP腳本,三種方法:

第一種方法:

一、編寫shell腳本:

shell文件:/home/www/shell/phpshell.php

#!/bin/bash
while [ true ]; do
/bin/sleep 1
/usr/bin/php /home/www/index.php >> /home/logs/phpshell.log
done
二、而且放入後臺運行:

/home/www/shell/phpshell.php &

三、使用tail -f 命令跟蹤日誌。

第二種方法:


a 在Crontab中使用PHP執行腳本
  * * * * * /usr/bin/php /home/www/index.php  每分鐘執行php腳本

b 在Crontab中使用URL執行腳本

   若是你的PHP腳本能夠經過URL觸發,你可使用lynx或curl或wget來配置你的Crontab。 
下面的例子是使用Lynx文本瀏覽器訪問URL來每小時執行PHP腳本。Lynx文本瀏覽器默認使用對話方式打開URL。可是,像下面的,咱們在lynx命令行中使用-dump選項來把URL的輸出轉換來標準輸出.

    例子:* * * * * lynx -dump http://www.cnblogs.com/index.php

下面的例子是使用CURL訪問URL來每5分執行PHP腳本。Curl默認在標準輸出顯示輸出。使用」curl -o」選項,你也能夠把腳本的輸出轉儲到臨時文件。

    例子:*/5 * * * * /usr/bin/curl -o /home/logs/temp.log http://www.cnblogs.com/index.php

下面的例子是使用WGET訪問URL來每10分執行PHP腳本。-q選項表示安靜模式。」-O temp.txt」表示輸出會發送到臨時文件。

    例子:*/10 * * * * /usr/bin/wget -q -O /home/logs/temp.log http://www.cnblogs.com/index.php

第三種每秒執行shell腳本方法:

a shell腳本:/home/shell/phpshell.sh

   #!/bin/bash
   step=2 #間隔的秒數,不能大於60
   for (( i = 0; i < 60; i=(i+step) )); do
   $(php '/home/fdipzone/php/crontab/tolog.php')
   sleep $step
   done
   exit 0
b crontab 命令執行腳本文件
   * * * * * /home/shell/phpshell.sh

 

使用curl來執行

*/5 * * * *  curl -s http://test.com/on.php   

s表示靜默狀態下執行php腳本

相關文章
相關標籤/搜索