聊聊php定時計劃任務
google百度了下,PHP任務大體上可以分為三類
1、伺服器計劃任務
WIN伺服器可以直接使用定時任務執行相關的應用程式,LINUX伺服器則可以通過在/etc/crontab裡新增定時任務來實現。
2、通過死迴圈實現任務自動執行
建立一個程式檔案頁面,通過ignore_user_abort來設定關閉瀏覽器頁面後仍可執行,那麼,在執行該程式頁面後,您所需要的任務計劃便會一直自動執行。對於一般的PHP程式設計師來說,如果沒有足夠的把握,這種操作是不被允許的,因為死迴圈極容易使用伺服器當機。
3、觸發式定時任務
在我所瞭解的幾套程式中,像Discuz、帝國CMS等等,均使用這種方式來完成系統的定時任務,相對前面的兩種方法,這是最為安全和簡單的。
Discuz:
在您設定的計劃任務執行時刻,如果有人訪問您的站點,計劃任務才會執行;如果那個時刻沒有人訪問您的站點,一直到有人訪問時才執行計劃任務。
定時任務對於php來說一直都是很多朋友的一個難題,但卻很多地方都遇到了。
比如說:
遊戲開發程式中,每隔10分鐘給玩家發兵一次
sns社群中每隔20秒檢測一下是否有人給我發訊息
自動採集程式,每隔5分鐘採集一次最新內容
微博資料同步,每隔10個小時通過微博api介面同步一次使用者資料
……
大概有那麼幾種方法:
1.Linux系統
定時直接可以用cron來執行一個php指令碼 或者其他語言的指令碼[你要有足夠的系統許可權]
執行編輯cron命令
1
|
crontab -e
|
比如每隔5分鐘執行下 /root/bin目錄下的test.php指令碼
*/5 * * * * php /root/bin/test.php
2.windows系統
可用計劃任務執行指令碼,不舉例
PHP的實現決定了它沒有Java和.Net這種AppServer的概念, 而http協議是一個無狀態的協議, php只能被使用者觸發, 被呼叫, 呼叫後會自動退出記憶體, 沒有常駐記憶體, 就沒有辦法準確的定時處理
那麼, 如果需要用PHP定時執行某些任務的話, 可以有以下幾個方法:
1、Linux下crontab, windows下計劃任務
2、找個被頻繁呼叫的網頁, 裡面加上一個檢測程式碼
3、set_time_limit(0);
ignore_user_abort(true);
死迴圈
第一種:方法是最常見的, 但也是最靠譜的,如果php伺服器上沒有許可權去crontab, 也可以找一個自己的機器定期crontab去請求伺服器
第二種:方法, 論壇上定時清理新帖基本上就是這麼實現的, 如果人氣不旺的話, 可以考慮去別的火爆點的論壇裡面發個圖片, 呼叫自己的php來實現一個trigger就好了。 Discuz!是判斷在00:00之後,第一個執行者去執行的。
第三種:最不靠譜, Apache重啟了就得重新訪問, fastcgi倒是會好一點。
網上參考:
http://blog.163.com/zbstrive_work@126/blog/static/165378687201141143512114/
本文轉自許琴 51CTO部落格,原文連結:http://blog.51cto.com/xuqin/1369169,如需轉載請自行聯絡原作者
相關文章
- php後臺定時執行任務PHP
- PHP定時執行任務的實現PHP
- 聊聊專案中定時任務的處理方式
- 定時任務
- 伺服器中了木馬後門如何排查定時任務計劃伺服器
- 定時任務操作
- SpringTask定時任務Spring
- Java 定時任務Java
- At 、Crontabl定時任務
- @Scheduled 定時任務
- Oracle定時任務Oracle
- Navicat定時任務
- schedule 定時任務
- SpringBoot定時任務Spring Boot
- 定時任務管理
- ubuntu定時任務Ubuntu
- Linux | 定時任務Linux
- springboot:定時任務Spring Boot
- laravel定時任務Laravel
- crontab定時任務
- 定時任務scheduler
- Linux 定時任務Linux
- 寶塔皮膚計劃任務定時推送公眾號模板訊息
- .NetCore Hangfire任務計劃NetCore
- Linux 任務計劃管理Linux
- 定時任務crond服務
- 使用者自定義定時任務的php實現PHP
- SpringBoot與非同步任務、定時任務、郵件任務Spring Boot非同步
- Linux系統中延時任務及定時任務Linux
- Java & Go 定時任務JavaGo
- 定時任務總覽
- 定時任務技術
- SpingBoot @Scheduled定時任務boot
- Linux crontab 定時任務Linux
- Golang——Cron 定時任務Golang
- springboot定時任務之旅Spring Boot
- Android WorkManager 定時任務Android
- springboot定時任務@ScheduledSpring Boot
- SpringBoot 定時任務ScheduledSpring Boot