yii2 做定時任務 crontab
1. 在yii2 專案中 ,定時任務是放在
2. 在專案裡邊遇到的坑
剛開始在做專案的時候,將專案的 命令空間 由 app 改為 supermarket
定時任務的程式碼寫完了,
1. 先在 本地 用 windows 的 cmd 去測試 :輸入如下命令 :
進入到專案的根目錄 (xiaoniao-new) ,使用如下命令 :
解釋 : php yii 控制器/方法名
注意 :如上的命令是在 php ,被加入環境變數的情況下,可以直接使用 php
檢視 php 是否加入環境變數的命令 : php -v
2. 執行了 php yii 控制器/方法名 命令之後,直接報錯
報錯原因是因為,同事之前將專案跟目錄下面的一些檔案刪除了,我去 恰恰用到的兩個檔案全被刪了
解決 : 重新下載的框架程式碼,加上了這兩個檔案在去執行上面的命令
3. 報錯 db 這個元件應該有個 class 的值
原因 : yii2 控制檯執行的時候,載入的是 配置檔案 config 裡面的 console.php 這配置檔案
開啟 console.php 檔案,果然沒有 db 這個項 的配置 ,(疑問: 那為什麼在專案裡面訪問的時候,就沒有報錯了,哈哈哈,因為在專案裡邊訪問的時候,用的不是這配置檔案啊,這個配置檔案只有在 定時任務的時候才會用啊)
乖乖的加上 db 的配置,在去執行 剛才的命令 : php yii 控制器/方法名
4. 又出現問題了 : 無法請求 channel-statistics/output
這個還是要仔細看報錯資訊才能發現喔
5. 根據之前的經驗,分析可能出現的原因,左思右想,明明存在,為什麼訪問不了
想想之前的經歷 : 可能是 由於 名稱空間的問題???由於名稱空間不一致,導致無法訪問
6. 開啟 配置檔案 console.php
commands 下,檔案對應的 名稱空間是一致的呀,為什麼會不能執行了
萬般無奈之下,打開了 yii2 框架原始碼 的 配置檔案 console.php 看看
原始碼裡邊用的是 : app
試著將專案裡邊的 console.php 和 commands 下檔案 對應的名稱空間 都修改為 app ,在去執行剛才的命令
我去,驚喜無處不在,竟然可以執行了
7. 在說說遇到的另一個問題,commands 下的檔案引用的 controller 應該是
use yii\console\Controller; 而不是 use yii\web\Controller; 這個坑我爬過來了
8. 本地測試完了,該在 linux 伺服器上測試了,上傳程式碼,crontab 建立
1. crontab -e 開啟 在裡面配置 , 定時任務的程式碼。如下
配置如下程式碼:前面時間控制另行查詢,這裡不做解釋
2. 重新啟動 crontable 命令。
sudo service crond restart
ok.靜靜的等待結果
3. 如果沒有結果,排除錯誤的方法
在終端 直接執行,剛才的配置,等待結果
結果ok , 那就說明
基本能確定 就是 定時任務的時間配置有問題 (自行查詢時間配置格式 解決)!!!!