ThinkPHP實(shí)現(xiàn)定時(shí)任務(wù)的操作步驟
接到一個(gè)需求:定時(shí)檢查設(shè)備信息,2分鐘沒有心跳的機(jī)器,推送消息給相關(guān)人員,用thinkphp5框架,利用框架自帶的任務(wù)功能與crontab配合來完成定時(shí)任務(wù)。
第一步:分析需求
- 先寫獲取設(shè)備信息,2分鐘之內(nèi)沒有心跳的設(shè)備信息數(shù)據(jù)的功能;
- 再寫推送消息給相關(guān)人員的功能;
- 寫定時(shí)任務(wù),調(diào)用推送消息的功能,將設(shè)備故障的數(shù)據(jù)通過飛書推送給相關(guān)人員處理;
第二步:開始編寫代碼
這個(gè)需求的難點(diǎn)在于推送消息和利用框架編寫定時(shí)任務(wù)的功能,本文就定時(shí)任務(wù)的功能進(jìn)行代碼展示。
用的框架是thinkphp5框架,利用框架自帶的任務(wù)功能與crontab配合來完成定時(shí)任務(wù)。
1. 在tp框架中編寫邏輯代碼
創(chuàng)建command模塊,定義任務(wù)類:在項(xiàng)目application目錄下創(chuàng)建command模塊文件夾->創(chuàng)建任務(wù)類文件,繼承
think\console\Command; think\console\Input; think\console\Output;
- 編寫任務(wù)邏輯代碼:通過實(shí)現(xiàn)configure方法來設(shè)置任務(wù)的名稱和描述,execute方法來實(shí)現(xiàn)執(zhí)行任務(wù)的邏輯,可以調(diào)用其他的方法來實(shí)現(xiàn)具體的任務(wù)邏輯,例如:發(fā)送通知、處理數(shù)據(jù)等。
- 配置命令文件:在項(xiàng)目的application目錄下的command.php文件中配置,返回一個(gè)數(shù)組,包含所有類的命名空間,這樣thinkphp就知道可以執(zhí)行的命令。
下面貼上代碼,僅供參考:
<?php namespace app\command; use app\admin\controller\Message; use think\console\Command; use think\console\Input; use think\console\Output; /** * 定時(shí)任務(wù)類 * Class Task * User:赫陳 * Date: 2024-07-02 */ class TaskF extends Command { // 設(shè)置命令名稱和描述 protected function configure() { $this->setName('sendmessage') ->setDescription('設(shè)備故障發(fā)送消息到飛書群'); } // 執(zhí)行命令的邏輯 protected function execute(Input $input, Output $output) { // 在這里編寫具體的任務(wù)邏輯,例如發(fā)送消息給用戶 $output->writeln("開始發(fā)送消息..."); // 假設(shè)有一個(gè)方法 sendMessageToUser() 用于發(fā)送消息 $res = $this->sendMessageToUser(); $output->writeln("消息發(fā)送結(jié)果:".$res["message"]); if($res['status'] != 'no'){ $output->writeln("消息發(fā)送完成!"); } } private function sendMessageToUser() { // 實(shí)現(xiàn)發(fā)送消息的具體邏輯,例如調(diào)用API或數(shù)據(jù)庫操作等 $Message = new Message(); $res = $Message -> sendMessage(); return $res; } }
2. 測試代碼
邏輯代碼編寫完后,打開終端,輸入thinkphp的命令開始測試
命令:php think sendmessage
回車執(zhí)行命令
第三步:配置crontab
1. 打開終端,輸入crontab -e 命令,編寫crontab文件
輸入如下命令:
*/5 * * * * /usr/php/bin/php /home/www/project/think sendtofeishu >> /home/wwwroot/tuoluo/runtime/log/task.log 2>&1
解釋:
命令*號(hào)的部分為分、時(shí)、日、月、周,把想要執(zhí)行的時(shí)間寫上,這個(gè)是每5分鐘執(zhí)行一次;
/usr/php/bin/php 這部分是php的安裝路徑,必須得寫這個(gè),要不然系統(tǒng)找不到可執(zhí)行的系統(tǒng);
/home/www/project/think sendtofeishu 這部分是項(xiàng)目的根目錄路徑,必須寫全了,這樣系統(tǒng)才能找到應(yīng)用;
/home/wwwroot/project/runtime/log/task.log 這部分是執(zhí)行任務(wù)產(chǎn)生的日志文件路徑,文件若是沒有會(huì)自動(dòng)創(chuàng)建。
2. 保存并退出,用crontab -l 命令查看crontab命令。
第四步:查看執(zhí)行日志
查看文件中配置的日志文件:用cat 文件名 或者tail -f 命令查看都行。
到此這篇關(guān)于ThinkPHP實(shí)現(xiàn)定時(shí)任務(wù)的操作步驟的文章就介紹到這了,更多相關(guān)ThinkPHP定時(shí)任務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
php json_encode值中大括號(hào)與花括號(hào)區(qū)別
這篇文章主要介紹了json_encode值中大括號(hào)與花括號(hào)區(qū)別,具體的看下實(shí)例說明,需要的朋友參考下2013-09-09php準(zhǔn)確計(jì)算復(fù)活節(jié)日期的方法
這篇文章主要介紹了php準(zhǔn)確計(jì)算復(fù)活節(jié)日期的方法,涉及php操作日期的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04php面向?qū)ο蟪绦蛟O(shè)計(jì)中self與static的區(qū)別分析
這篇文章主要介紹了php面向?qū)ο蟪绦蛟O(shè)計(jì)中self與static的區(qū)別,結(jié)合實(shí)例形式分析了php面向?qū)ο蟪绦蛟O(shè)計(jì)中self與static的功能、以及在繼承過程中實(shí)現(xiàn)多態(tài)的區(qū)別,并總結(jié)了static靜態(tài)延遲綁定的原理,需要的朋友可以參考下2019-05-05Windows中安裝Apache2和PHP4權(quán)威指南
Windows中安裝Apache2和PHP4權(quán)威指南...2006-11-11php中error與exception的區(qū)別及應(yīng)用
這篇文章主要介紹了php中error與exception的區(qū)別及應(yīng)用,需要的朋友可以參考下2014-07-07Android AsyncTack 異步任務(wù)實(shí)例詳解
這篇文章主要介紹了Android AsyncTack 異步任務(wù)實(shí)例詳解的相關(guān)資料,并附簡單實(shí)例代碼,和實(shí)現(xiàn)效果圖,需要的朋友可以參考下2016-11-11php模擬js函數(shù)unescape的函數(shù)代碼
php模擬js函數(shù)unescape的函數(shù)代碼,需要的朋友可以參考下2012-10-10PHP實(shí)現(xiàn)redis限制單ip、單用戶的訪問次數(shù)功能示例
這篇文章主要介紹了PHP實(shí)現(xiàn)redis限制單ip、單用戶的訪問次數(shù)功能,結(jié)合實(shí)例形式分析了php連接redis及獲取、記錄客戶端信息,并限制客戶訪問次數(shù)等操作技巧,需要的朋友可以參考下2018-06-06