Yii2 console執行定時指令碼

2022-01-22 17:10:34 字數 3260 閱讀 8100

我們的專案使用yii2開發,並不是很大的乙個電商平台,pv、ip訪問量並不是很高,但客戶的資料是日積月累已經產生100萬條資料了,之前更新訂單等資料使用定時指令碼直接訪問內網的乙個url,因為更新訂單只是部分資料,php後台執行10s完全可以勝任。

現在需求是這樣的:之前系統沒有考慮客戶的積分等級,現在需要加入這個功能,所以必須給客戶表新增積分字段,在新增乙個積分記錄表,那麼之前老客戶資料因下單,本應該也生成對應的積分等級,而且要每晚上執行一次昨天下單客戶對應的成長值,每月定期計算一次過期積分清零操作(類似支付寶會員積分、網易遊戲積分:好,需求就這麼簡單。

繼續使用crontab 訪問乙個內網的url進行更新操作,這樣不可取,因為現在是100w條資料,php的url訪問肯定會超時。

那就只能執行php指令碼了,執行php指令碼想了兩個方案,第一種,寫乙個pdo類,直接單獨檔案執行,第二種,使用yii自帶的console,兩者之間選擇了後者。

官文手冊:

目錄結構

}訪問試試

$ php yii hello

hello world

error: unknown command "hello".
因為目錄別名的問題,所以,如果沒有生成bootstrap.php 中的別名配置,可以直接在yii檔案中加上:

yii::setalias('@console', (dirname(__dir__)) . '/console');
如果在console中要使用activerecord 操作 models,必須設定common別名

yii::setalias('common', (dirname(__dir__)) . '/common');
config檔案中db的引用應該使用決定路徑而不是相對路徑

$db= require(dirname(dirname(__dir__))."/common/config/main.php");
可以直接執行

$ php yii hello

hello world

在上面說過,要連線資料必須要給common使用別名執行路徑,下面測試下資料庫操作

public

function

actioncreate()

檢視資料庫已經插入。

寫好了邏輯**,直接用linux的crontab命令執行定時任務

關於crontab命令可參考: 

Yii2中Console定時任務

專案開發中經常會需要使用到定時任務,yii2中有乙個功能豐富的控制台命令,今天主要介紹一下如何使用控制台命令編寫以及執行定時任務。和 web 程式 index.php 入口檔案一樣,控制台命令也有乙個入口檔案,根目錄下的 yii 檔案。可以在入口檔案下執行 php yii 這時再執行 php yii...

yii2的Console定時任務建立

設定定時任務 linux下,執行crontab e 30 21 usr local php bin php your project path yii test test 應用程式 上面的例子表示每晚的21 30執行上面的定時程式 下面是定時任務設定的一些基本介紹 基本格式 command 分 時 ...

Yii2 定時任務建立(Console 任務)

yii2的定時任務可以有兩種寫法,原理都是通過伺服器的定時任務去呼叫 1.通過呼叫指定的url訪問 就相當於在瀏覽器中訪問 2.通過console呼叫 下面我們就來說說console 是如何實現定時任務的 php123 4567 891011 12 namespaceconsole controll...