php定期拉取數(shù)據(jù)對(duì)比方法實(shí)例
寫(xiě)在前面
今天在網(wǎng)上看帖子提問(wèn)的時(shí)候,看到有人發(fā)表了一個(gè)提問(wèn)
php下載遠(yuǎn)程的批量文件,每天一次,對(duì)比昨天和今天的文件,將舊文件替換成新文件
我們通過(guò)這個(gè)問(wèn)題來(lái)分析講解一下其中的知識(shí)點(diǎn)。
首先要解決的問(wèn)題是:如何讓程序每天自動(dòng)執(zhí)行一次腳本
php定時(shí)執(zhí)行任務(wù)
關(guān)于定時(shí)執(zhí)行,最常見(jiàn)的方法是利用系統(tǒng)級(jí)別自帶的功能
- linux ( crontab 定時(shí)任務(wù)命令) windows計(jì)劃任務(wù)
這需要手動(dòng)修改系統(tǒng)的任務(wù)文件,然后使其生效
手動(dòng)在linux添加定時(shí)任務(wù)
# crontab -e
運(yùn)行該命令 打開(kāi)任務(wù)編輯 在其中輸入任務(wù)內(nèi)容,然后Esc :wq保存退出
任務(wù)示例
0 0 * * * /www/siam/test.sh
前面的是運(yùn)行周期的配置,后面的是sh腳本的路徑,該方式一般需要自己編寫(xiě)sh腳本來(lái)執(zhí)行
寶塔面板快速計(jì)劃任務(wù)
如果我們使用寶塔面板當(dāng)成運(yùn)維工具,那么我們就可以很方便地添加計(jì)劃任務(wù)了,如下圖,寶塔中內(nèi)置了挺多計(jì)劃任務(wù)的類(lèi)型,如定時(shí)請(qǐng)求URL,運(yùn)行腳本,備份文件等等。
可視化配置,帶給我們極大的便利,維護(hù)、添加都節(jié)約了很多的時(shí)間。
這也是為什么寶塔受到那么多人喜愛(ài)的原因之一吧。
寶塔面板計(jì)劃任務(wù)的面板添加
取巧云監(jiān)控定時(shí)執(zhí)行
以上兩種方式都需要服務(wù)器的權(quán)限,我們才可以管理定時(shí)任務(wù),假設(shè)我們剛?cè)腴T(mén)時(shí)使用的是虛擬主機(jī),沒(méi)有權(quán)限設(shè)置腳本運(yùn)行,那么該如何實(shí)現(xiàn)這種功能呢?
這里記錄了我以前學(xué)習(xí)時(shí)利用的一個(gè)小方案,大家可以在其中學(xué)習(xí)一下。
云監(jiān)控,是很多云服務(wù)商提供的一項(xiàng)服務(wù),它可以用來(lái)測(cè)試、分析接口或者網(wǎng)站的穩(wěn)定性和執(zhí)行效率。
我們可以在服務(wù)商的后臺(tái)類(lèi)似寶塔面板一樣去添加任務(wù),然后服務(wù)商就會(huì)按我們?cè)O(shè)置的頻率,定期訪(fǎng)問(wèn)網(wǎng)址,獲取網(wǎng)址的正確執(zhí)行、時(shí)間等信息,記錄到他們后臺(tái),提供給用戶(hù)查看分析改進(jìn)。
我們可以利用這種特性,由服務(wù)商向我們的服務(wù)發(fā)起請(qǐng)求,我們可以填寫(xiě)一個(gè)php腳本的url,在其中判斷當(dāng)前時(shí)間,如果當(dāng)前時(shí)間周期已經(jīng)到了你設(shè)置的時(shí)間,則執(zhí)行下面的內(nèi)容
同時(shí)因?yàn)樵票O(jiān)控是不間斷地發(fā)起(一般最細(xì)顆粒是30s) 如果不能重復(fù)運(yùn)行的任務(wù),我們需要及時(shí)地把任務(wù)標(biāo)記為已經(jīng)執(zhí)行。
可以在本地寫(xiě)文件,當(dāng)文件鎖。
不同云監(jiān)控服務(wù)商有不同的設(shè)置和服務(wù)提供,網(wǎng)上有挺多免費(fèi)的。大家可以找一找,如果找不到好的,也可以聯(lián)系我QQ交流一下。
現(xiàn)代化PHP
PHP發(fā)展了這么久,其實(shí)已經(jīng)有了很大的改進(jìn),比如PHP5OOP特性的完善、PHP7的性能提高、Swoole生態(tài)的出現(xiàn),讓PHP能做的事越來(lái)越多,越做越好。
在當(dāng)今環(huán)境中,我們可以使用SWOOLE常駐內(nèi)存的特性完成很多事,
這里推薦一下EasySwoole這款基于Swoole環(huán)境的框架。
關(guān)于定時(shí)任務(wù)在EasySwoole框架中的文檔地址點(diǎn)這里EasySwoole Crontab 定時(shí)器
常駐內(nèi)存的程序,在服務(wù)器上后臺(tái)穩(wěn)定運(yùn)行,
EasySwoole中提供了豐富的組件,比如傳統(tǒng)PHPFPM環(huán)境很難解決的Mysql數(shù)據(jù)庫(kù)連接池、協(xié)程Redis客戶(hù)端、協(xié)程Http客戶(hù)端、芒果DB客戶(hù)端等等
還有我們這個(gè)主題有的一個(gè)定時(shí)任務(wù)的模塊,下面看一小段demo代碼
首先在主環(huán)境事件代碼中開(kāi)啟定時(shí)任務(wù)
public static function mainServerCreate(EventRegister $register) { // 開(kāi)始一個(gè)定時(shí)任務(wù)計(jì)劃 Crontab::getInstance()->addTask(TaskOne::class); }
定時(shí)任務(wù)的配置和內(nèi)容
namespace App\Crontab; use EasySwoole\EasySwoole\Crontab\AbstractCronTask; class TaskOne extends AbstractCronTask { public static function getRule(): string { // TODO: Implement getRule() method. // 定時(shí)周期 (每小時(shí)) return '@hourly'; } public static function getTaskName(): string { // TODO: Implement getTaskName() method. // 定時(shí)任務(wù)名稱(chēng) return 'taskOne'; } static function run(\swoole_server $server, int $taskId, int $fromWorkerId,$flags=null) { // 定時(shí)任務(wù)處理邏輯 // 我們?cè)谶@里執(zhí)行拉取文件、對(duì)比處理、保存文件的邏輯就好了 var_dump('run once per hour'); } }
其他問(wèn)題
解決了定時(shí)執(zhí)行的問(wèn)題,那么下載文件和保存文件,我覺(jué)得應(yīng)該都不會(huì)是很大的問(wèn)題
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
php 求質(zhì)素(素?cái)?shù)) 的實(shí)現(xiàn)代碼
php 求質(zhì)素(素?cái)?shù)) 的實(shí)現(xiàn)代碼,需要的朋友可以參考下。2011-04-04PHP中調(diào)試函數(shù)debug_backtrace的使用示例代碼
debug_backtrace() 是一個(gè)很低調(diào)的函數(shù),很少有人注意過(guò)它,這篇文章主要給大家介紹了關(guān)于PHP中調(diào)試函數(shù)debug_backtrace的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,感興趣的朋友們隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09詳談PHP面向?qū)ο笾谐S玫年P(guān)鍵字和魔術(shù)方法
下面小編就為大家?guī)?lái)一篇詳談PHP面向?qū)ο笾谐S玫年P(guān)鍵字和魔術(shù)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02解析PHP的Yii框架中cookie和session功能的相關(guān)操作
這篇文章主要介紹了PHP的Yii框架中cookie和session功能的相關(guān)操作,需要的朋友可以參考下2016-03-03php-redis中的sort排序函數(shù)總結(jié)
這篇文章主要介紹了php-redis中的sort排序函數(shù)總結(jié),本文講解了了按字母排序、排序取部分?jǐn)?shù)據(jù)、使用外部key進(jìn)行排序等排序方法,同時(shí)給出代碼實(shí)例,需要的朋友可以參考下2015-07-07php數(shù)組函數(shù)序列之a(chǎn)rray_keys() - 獲取數(shù)組鍵名
array_keys() 函數(shù)返回包含數(shù)組中所有鍵名的一個(gè)新數(shù)組。如果提供了第二個(gè)參數(shù),則只返回鍵值為該值的鍵名2011-10-10php實(shí)現(xiàn)的簡(jiǎn)單多進(jìn)程服務(wù)器類(lèi)完整示例
這篇文章主要介紹了php實(shí)現(xiàn)的簡(jiǎn)單多進(jìn)程服務(wù)器類(lèi),結(jié)合完整實(shí)例形式分析了PHP多進(jìn)程服務(wù)器數(shù)據(jù)傳輸、響應(yīng)、處理等相關(guān)操作技巧,需要的朋友可以參考下2020-02-02一個(gè)簡(jiǎn)單php擴(kuò)展介紹與開(kāi)發(fā)教程
這個(gè)擴(kuò)展早就寫(xiě)好了,只是一直沒(méi)有時(shí)間寫(xiě)在blog上面,今天抽點(diǎn)時(shí)間,將它記錄下來(lái),以后備用。2010-08-08