解析crontab php自動(dòng)運(yùn)行的方法
crontab是linux自帶的一個(gè)命令
使php自動(dòng)運(yùn)行的方法
php自動(dòng)運(yùn)行有很多方法,這里分以下DZ以及一些通過(guò)系統(tǒng)完成的方法和直接觸發(fā)運(yùn)行駐留系統(tǒng)的方法。
Discuz后臺(tái)有個(gè)計(jì)劃任務(wù),可以使php自動(dòng)運(yùn)行。
DZ計(jì)劃任務(wù)的機(jī)制是這樣:
1.首先在到了觸發(fā)計(jì)劃任務(wù)的時(shí)間,有訪問(wèn)(會(huì)員,游客,搜索引擎的蜘蛛)然后觸發(fā)該計(jì)劃任務(wù)發(fā)生。(因?yàn)镻HP是觸發(fā)是語(yǔ)言,沒(méi)有人去訪問(wèn)他,他什么也做不了。)
2. 計(jì)劃任務(wù)執(zhí)行.
3. 執(zhí)行成功,返回執(zhí)行成功的信息,更新到數(shù)據(jù)庫(kù)中記錄當(dāng)前執(zhí)行的時(shí)間,下一次需要執(zhí)行的時(shí)間。
目前讓php自動(dòng)運(yùn)行的的方法有以下幾種方法:
1:在windows下用計(jì)劃任務(wù)
在linux下用crantab
缺點(diǎn):必須具有服務(wù)器權(quán)限
2:用個(gè)某個(gè)網(wǎng)頁(yè)隔一段時(shí)間去刷新,比如用js或者php程序來(lái)實(shí)現(xiàn)。
缺點(diǎn):必須用某個(gè)工具將該頁(yè)開(kāi)著。
3:在有用戶訪問(wèn)的時(shí)候觸發(fā)
缺點(diǎn):必須在用戶訪問(wèn)的頁(yè)面里包含觸發(fā)程序。
用crontab定時(shí)執(zhí)行
是 UNIX的一個(gè)命令
crontab-操作每個(gè)用戶的守護(hù)程序和該執(zhí)行的時(shí)間表。
具體的部分參數(shù)說(shuō)明如下:
crontab file [-u user]-用指定的文件替代目前的crontab。
crontab-[-u user]-用標(biāo)準(zhǔn)輸入替代目前的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:小時(shí)(0-23)。
D:天(1-31)。
m: 月(1-12)。
d: 一星期內(nèi)的天(0~6,0為星期天)。
cmd要運(yùn)行的程序,程序被送入sh執(zhí)行,這個(gè)shell只有USER,HOME,SHELL這三個(gè)環(huán)境變量。
下面是一個(gè)例子文件:
#MIN HOUR DAY MONTH DAYOFWEEK COMMAND
#每天早上6點(diǎn)
106* * * date
#每?jī)蓚€(gè)小時(shí)
0*/2* * * date
#晚上11點(diǎn)到早上8點(diǎn)之間每?jī)蓚€(gè)小時(shí),早上部點(diǎn)
0 23-7/2,8* * * date
#每個(gè)月的4號(hào)和每個(gè)禮拜的禮拜一到禮拜三的早上11點(diǎn)
0 11 4* mon-wed date
#1月份日早上4點(diǎn)
0 4 1 jan* date
范例
lark:~>crontab-1 列出用戶目前的crontab.
#MIN HOUR DAY MONTH DAYOFWEEK COMMAND
10 6* * * date
0*/2* * * date
0 23-7/2,8 * * * date
在linux,有多種方式可以實(shí)現(xiàn)定時(shí)運(yùn)行,使用最靈活的應(yīng)該是crontab, 在使用crontab必須特別注意環(huán)境變量問(wèn)題,在此以執(zhí)行oracle的sqlplus為例, 說(shuō)明crontab的使用方法。
1:crontab 使用方法: crontab [ -e | -l | -r ] 文件名 -e:編輯任務(wù) -l:顯示任務(wù)信息 -r:刪除定時(shí)執(zhí)行任務(wù)信息
2:crontab中處理的文件格式為 分鐘 小時(shí) 日期 月 星期 執(zhí)行的文件名 *代表所有條件 5 * * * * rem /home/oracle/execsql 代表每個(gè)小時(shí)的5分鐘時(shí)執(zhí)行/home/oracle/execsql文件
3:對(duì)于sql等需要在特定的環(huán)境變量下運(yùn)行的命令,在執(zhí)行文件中必須列出。 如在oracle下執(zhí)行sqlplus,必須按以下格式編寫(xiě): $ cat execsql ORACLE_HOME=/ora815;export ORACLE_HOME ORACLE_OWNER=oracle;export ORACLE_OWNER ORACLE_SID=ora815;export ORACLE_SID ORACLE_BASE=/ora815/app/oralce;export ORACLE_BASE LD_LIBRARY_PATH=$ORACLE_HOME/lib;export LD_LIBRARY_PATH PATH=$PATH:$ORACLE_HOME/bin:$LD_LIBRARY_PATH;export PATH NLS_LANG=AMERICAN_AMERICA.ZHS16CGB231280;export NLS_LANG /ora815/bin/sqlplus test1/test1 @test1.ext (執(zhí)行@test1.ext文件,數(shù)據(jù)庫(kù)的用戶名/密碼為test1/test1)
其中要求execsql為可執(zhí)行的程序 $ ls -al execsql -rwxr-xr-x 1 oracle dba 374 Oct 07 15:17 execsql
使用crontab,使php程序在12:00運(yùn)行
就按照下面的格式改一下,加在crontab就行了
00 0 * * * cd /你的程序路徑;php 你的程序名字.php
這個(gè)需要編譯的時(shí)候有cli或者cgi模式的php.
另外:
若無(wú)管理權(quán)限,只有虛擬空間
PHP里有個(gè)函數(shù)很有用。這是在最近的開(kāi)發(fā)中才逐漸用到的。 int ignore_user_abort ( [bool setting] ) 這個(gè)函數(shù)的作用是指示服務(wù)器端在遠(yuǎn)程客戶端關(guān)閉連接后是否繼續(xù)執(zhí)行下面的腳本。 setting 參數(shù)是一個(gè)可選參數(shù)。如設(shè)置為T(mén)rue,則表示如果用戶停止腳本運(yùn)行,仍然不影響腳本的運(yùn)行(即:腳本將持續(xù)執(zhí)行);如果設(shè)置為False,則表示當(dāng)用戶停止運(yùn)行腳本程序時(shí),腳本程序?qū)⑼V惯\(yùn)行。 下面這個(gè)例子,在用戶關(guān)閉瀏覽器后,該腳本仍然后在服務(wù)器上繼續(xù)執(zhí)行:
ignore_user_abort(); // 后臺(tái)運(yùn)行
set_time_limit(0); // 取消腳本運(yùn)行時(shí)間的超時(shí)上限
do{
sleep(60); // 休眠1分鐘
}while(true);
除非在服務(wù)器上關(guān)閉這個(gè)程序,否則這斷代碼將永遠(yuǎn)執(zhí)行下去。
- linux使用crontab實(shí)現(xiàn)PHP執(zhí)行計(jì)劃定時(shí)任務(wù)
- CentOS下采用Crontab實(shí)現(xiàn)PHP腳本定時(shí)任務(wù)
- 如何使用Linux的Crontab定時(shí)執(zhí)行PHP腳本的方法
- crontab無(wú)法執(zhí)行php的解決方法
- PHP中實(shí)現(xiàn)crontab代碼分享
- linux下使用crontab實(shí)現(xiàn)定時(shí)PHP計(jì)劃任務(wù)失敗的原因分析
- Ubuntu系統(tǒng)下用Crontab命令定時(shí)執(zhí)行PHP文件詳解
- Linux環(huán)境使用crontab命令設(shè)置定時(shí)周期性執(zhí)行任務(wù)【含php執(zhí)行代碼】
- 詳解PHP實(shí)現(xiàn)定時(shí)任務(wù)的五種方法
- 詳解PHP執(zhí)行定時(shí)任務(wù)的實(shí)現(xiàn)思路
- php解決crontab定時(shí)任務(wù)不能寫(xiě)入文件問(wèn)題的方法分析
相關(guān)文章
php實(shí)現(xiàn)session共享的實(shí)例方法
在本篇文章里小編給大家整理的是關(guān)于php如何實(shí)現(xiàn)session共享知識(shí)點(diǎn)內(nèi)容,有需要的朋友們跟著學(xué)習(xí)參考下。2019-09-09
php獲取從百度搜索進(jìn)入網(wǎng)站的關(guān)鍵詞的詳細(xì)代碼
以下是關(guān)于php該如何獲取從百度搜索進(jìn)入網(wǎng)站的關(guān)鍵詞的詳細(xì)代碼,希望本文對(duì)廣大php開(kāi)發(fā)者有所幫助2014-01-01
PHP設(shè)計(jì)模式之結(jié)構(gòu)模式的深入解析
本篇文章是對(duì)PHP設(shè)計(jì)模式中的結(jié)構(gòu)模式進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
php+mysql+jquery實(shí)現(xiàn)簡(jiǎn)易的檢索自動(dòng)補(bǔ)全提示功能
這篇文章主要介紹了php+mysql+jquery實(shí)現(xiàn)簡(jiǎn)易的檢索自動(dòng)補(bǔ)全提示功能,涉及基于jQuery的ajax數(shù)據(jù)庫(kù)查詢與事件動(dòng)態(tài)響應(yīng)相關(guān)操作技巧,需要的朋友可以參考下2017-04-04
微信 開(kāi)發(fā)生成帶參數(shù)的二維碼的實(shí)例
這篇文章主要介紹了微信 開(kāi)發(fā)生成帶參數(shù)的二維碼的實(shí)例的相關(guān)資料,這里詳細(xì)介紹該如何實(shí)現(xiàn)二維碼,需要的朋友可以參考下2016-11-11
php實(shí)現(xiàn)建立多層級(jí)目錄的方法
這篇文章主要介紹了php實(shí)現(xiàn)建立多層級(jí)目錄的方法,需要的朋友可以參考下2014-07-07
PHP簡(jiǎn)單實(shí)現(xiàn)上一頁(yè)下一頁(yè)功能示例
這篇文章主要介紹了PHP簡(jiǎn)單實(shí)現(xiàn)上一頁(yè)下一頁(yè)功能,結(jié)合實(shí)例形式較為詳細(xì)的分析了php實(shí)現(xiàn)上一頁(yè)下一頁(yè)功能的原理與具體實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-09-09

