php定時(shí)執(zhí)行任務(wù)的幾個(gè)方法
PHP定時(shí)執(zhí)行的三種方式實(shí)現(xiàn)
1、windows 的計(jì)劃任務(wù) 2、linux的腳本程序 3、讓web瀏覽器定時(shí)刷新
具體實(shí)現(xiàn)
1、windows計(jì)劃任務(wù)
PHP很少在win服務(wù)器上跑,具體實(shí)現(xiàn)也不再深究,看網(wǎng)上實(shí)現(xiàn)的原理大概是寫bat腳本,然后讓window任務(wù)添加執(zhí)行這個(gè)bat腳本。
2、linux 的腳本實(shí)現(xiàn)
這里主要使用到crontab這個(gè)命令,
使用方式 :
復(fù)制代碼 代碼如下:crontab filecrontab [ -u ur ] [ -u ur ] { -l | -r | -e }
說(shuō)明 :
crontab是用來(lái)讓使用者在固定時(shí)間或固定間隔執(zhí)行程式之用
使用crontab寫shell腳本,然后讓PHP調(diào)用shell,這個(gè)是利用linux的特性,應(yīng)該還不算PHP自身語(yǔ)言的特性
3、PHP實(shí)現(xiàn)定時(shí)執(zhí)行計(jì)劃任務(wù)
使用php讓瀏覽器刷新需要解決幾個(gè)問(wèn)題
PHP腳本執(zhí)行時(shí)間限制,默認(rèn)的是30m 解決辦法:t_time_limit();或者修改PHP.ini 設(shè)置max_execution_time時(shí)間(不推薦)
如果客戶端瀏覽器關(guān)閉,程序可能就被迫終止,解決辦法:ignore_ur_abort即使關(guān)閉頁(yè)面依然正常執(zhí)行
如果程序一直執(zhí)行很有可能會(huì)消耗大量的資源,解決辦法使用sleep使用程序休眠一會(huì),然后在執(zhí)行
PHP定時(shí)執(zhí)行的代碼:
<?php ignore_ur_abort();//關(guān)掉瀏覽器,PHP腳本也可以繼續(xù)執(zhí)行. t_time_limit(3000);// 通過(guò)t_time_limit(0)可以讓程序無(wú)限制的執(zhí)行下去 $interval=5;// 每隔5s運(yùn)行 //方法1--死循環(huán) do{ echo '測(cè)試'.time().'<br/>'; sleep($interval);// 等待5s }while(true); //方法2---sleep 定時(shí)執(zhí)行 require_once './curlClass.php';//引入文件 $curl = new httpCurl();//實(shí)例化 $stime = $curl->getmicrotime(); for($i=0;$i<=10;$i++){ echo '測(cè)試'.time().'<br/>'; sleep($interval);// 等待5s } ob_flush(); flush(); $etime = $curl->getmicrotime(); echo '<hr>'; echo round(($etime-stime),4);//程序執(zhí)行時(shí)間
測(cè)試的時(shí)候發(fā)現(xiàn)這個(gè)效率并不是很高。
總結(jié):
個(gè)人感覺(jué)PHP定時(shí)執(zhí)行任務(wù)的效率不是很高,建議關(guān)于定時(shí)執(zhí)行任務(wù)的工作還是交給shell來(lái)做吧。
電腦怎么設(shè)置定時(shí)執(zhí)行任務(wù)
Win7設(shè)置定時(shí)自動(dòng)執(zhí)行任務(wù)的步驟如下(以設(shè)置定時(shí)自動(dòng)執(zhí)行關(guān)機(jī)為例): 1、在桌面上,右擊“計(jì)算機(jī)”,點(diǎn)擊“管理”。 2、找到左側(cè)“系統(tǒng)工具”→“任務(wù)計(jì)劃程序”→“任務(wù)計(jì)劃程序庫(kù)”,在右側(cè)空白區(qū)域右擊,點(diǎn)擊“創(chuàng)建基本任務(wù)”。 3、在彈出窗口,名稱寫“自動(dòng)關(guān)機(jī)”(任意名字),點(diǎn)擊“下一步”。 4、選擇“一次”(或是其他的,根據(jù)需要選擇),點(diǎn)擊“下一步”。 5、確定關(guān)機(jī)時(shí)間,比如圖上是2016年8月24日18點(diǎn)整,點(diǎn)擊“下一步”。 6、這一步,默認(rèn)即可,點(diǎn)擊“下一步”。 7、程序或腳本輸入“shutdown”,添加參數(shù)輸入“-s”,點(diǎn)擊下一步。 8、確認(rèn)無(wú)誤,點(diǎn)擊“完成”。
定時(shí)執(zhí)行腳本
crontab -l查看任務(wù)
crontab -e便捷定時(shí)編輯任務(wù)
當(dāng)我們編輯完定時(shí)任務(wù)過(guò)后,記得重載一遍crond
systemctl reload crond.rvice
啟動(dòng)、停止、重啟服務(wù)↓
systemctl start crond.rvice
systemctl stop crond.rvice
systemctl restart crond.rvice
為了方便我們可以把crontab設(shè)置成開(kāi)機(jī)自啟 在 /etc/rc.d/rc.local 腳本中加入 systemctl start crond.rvice即可
查看定時(shí)任務(wù)
[root@localhost ~]# crontab -l
1 1 * * * mysql -uzabbix -pzabbix zabbix -e "CALL partition_maintenance_all('zabbix')"
每天22點(diǎn)1分執(zhí)行mysql -uzabbix -pzabbix zabbix -e "CALL partition_maintenance_all('zabbix')"命令
查看腳本執(zhí)行情況
[root@localhost ~]# cat /var/log/cron
Apr 24 22:01:01 localhost CROND[11793]: (root) CMD (mysql -uzabbix -pzabbix zabbix -e "CALL partition_maintenance_all('zabbix')")
Apr 24 22:01:01 localhost CROND[11794]: (root) CMD (run-parts /etc/cron.hourly)
Apr 24 22:01:01 localhost run-parts(/etc/cron.hourly)[11794]: starting 0anacron
Apr 24 22:01:01 localhost run-parts(/etc/cron.hourly)[11804]: finished 0anacron
Apr 24 22:01:01 localhost run-parts(/etc/cron.hourly)[11794]: starting 0yum-hourly.cron
Apr 24 22:01:01 localhost run-parts(/etc/cron.hourly)[11810]: finished 0yum-hourly.cron
Apr 24 22:17:20 localhost crontab[11873]: (root) LIST (root)
windows命令提示符下怎么定時(shí)執(zhí)行一個(gè)命令?
cmd下定時(shí)執(zhí)行命令可以使用
at
命令
或者
schtasks命令。
at
語(yǔ)法:at
+時(shí)間+運(yùn)行程序
schtasks語(yǔ)法:schtasks
/creat
/tn
設(shè)定定時(shí)運(yùn)行的名字
/tr
“運(yùn)行程序”
/sc
daily
/st時(shí)間
例:
1、at
12:30
notepad(12:30時(shí)運(yùn)行記事本)
2、at
19:30
calc(19:30時(shí)運(yùn)行計(jì)算器)
3、schtasks
/create
/tn
定時(shí)運(yùn)行
/tr
"notepad"
/sc
daily
/st
12:30(12:30時(shí)運(yùn)行記事本)
4、schtasks
/create
/tn
定時(shí)運(yùn)行
/tr
"calc"
/sc
daily
/st
19:30(19:30時(shí)運(yùn)行計(jì)算器)
如何定時(shí)執(zhí)行bat
定時(shí)執(zhí)行bat文件的方法:
1、例如需要每天運(yùn)行,使用at命令
at 18:00 /interactive /every:M,T,W,TH,F,S,SU c:\a.exe
2、獲取輸出也很容易,這樣
c:\a.exe > c:\1.txt
for /f "delims=" %%i in (c:\1.txt) do echo %%i
3、或是添加下一行指令
at \\127.0.0.1 12:00 cmd /c start "" "d:\a.bat"
即可。
用C#寫WEB程序,如何實(shí)現(xiàn)定時(shí)執(zhí)行
你的問(wèn)題描述的不是很清楚,定時(shí)執(zhí)行的話分兩種,一種是每天固定時(shí)間點(diǎn)(比如每天凌晨)執(zhí)行一次,還有一種是每間隔多少毫秒執(zhí)行一次,而你說(shuō)的是web程序,又分在服務(wù)端執(zhí)行還是在瀏覽器端執(zhí)行,
1、服務(wù)器端每天固定時(shí)間執(zhí)行的情況(比較常見(jiàn)):將執(zhí)行內(nèi)容做成rvice如webrvice,或者wcf的服務(wù),然后在服務(wù)器上創(chuàng)建定時(shí)任務(wù)調(diào)用者rvice,將定時(shí)任務(wù)設(shè)置成開(kāi)機(jī)啟動(dòng)
2服務(wù)端每間隔固定毫秒執(zhí)行一次(很少這么干):?jiǎn)为?dú)做個(gè)托盤程序,開(kāi)個(gè)多線程,每次執(zhí)行完,線程阻塞(休眠)一定毫秒數(shù)
3、瀏覽器端每天固定時(shí)間執(zhí)行(基本不會(huì)這么干,因?yàn)榉?wù)端無(wú)法控制什么時(shí)間用戶訪問(wèn))
4、瀏覽器端每間隔固定毫秒數(shù)(這種情況時(shí)間比較短):一般采用異步多線程方式處理。