ThinkPHP實現(xiàn)定時任務(wù)的操作步驟
接到一個需求:定時檢查設(shè)備信息,2分鐘沒有心跳的機器,推送消息給相關(guān)人員,用thinkphp5框架,利用框架自帶的任務(wù)功能與crontab配合來完成定時任務(wù)。
第一步:分析需求
- 先寫獲取設(shè)備信息,2分鐘之內(nèi)沒有心跳的設(shè)備信息數(shù)據(jù)的功能;
- 再寫推送消息給相關(guān)人員的功能;
- 寫定時任務(wù),調(diào)用推送消息的功能,將設(shè)備故障的數(shù)據(jù)通過飛書推送給相關(guān)人員處理;
第二步:開始編寫代碼
這個需求的難點在于推送消息和利用框架編寫定時任務(wù)的功能,本文就定時任務(wù)的功能進行代碼展示。
用的框架是thinkphp5框架,利用框架自帶的任務(wù)功能與crontab配合來完成定時任務(wù)。
1. 在tp框架中編寫邏輯代碼
創(chuàng)建command模塊,定義任務(wù)類:在項目application目錄下創(chuàng)建command模塊文件夾->創(chuàng)建任務(wù)類文件,繼承
think\console\Command; think\console\Input; think\console\Output;

- 編寫任務(wù)邏輯代碼:通過實現(xiàn)configure方法來設(shè)置任務(wù)的名稱和描述,execute方法來實現(xiàn)執(zhí)行任務(wù)的邏輯,可以調(diào)用其他的方法來實現(xiàn)具體的任務(wù)邏輯,例如:發(fā)送通知、處理數(shù)據(jù)等。
- 配置命令文件:在項目的application目錄下的command.php文件中配置,返回一個數(shù)組,包含所有類的命名空間,這樣thinkphp就知道可以執(zhí)行的命令。

下面貼上代碼,僅供參考:
<?php
namespace app\command;
use app\admin\controller\Message;
use think\console\Command;
use think\console\Input;
use think\console\Output;
/**
* 定時任務(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è)有一個方法 sendMessageToUser() 用于發(fā)送消息
$res = $this->sendMessageToUser();
$output->writeln("消息發(fā)送結(jié)果:".$res["message"]);
if($res['status'] != 'no'){
$output->writeln("消息發(fā)送完成!");
}
}
private function sendMessageToUser()
{
// 實現(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
解釋:
命令*號的部分為分、時、日、月、周,把想要執(zhí)行的時間寫上,這個是每5分鐘執(zhí)行一次;
/usr/php/bin/php 這部分是php的安裝路徑,必須得寫這個,要不然系統(tǒng)找不到可執(zhí)行的系統(tǒng);
/home/www/project/think sendtofeishu 這部分是項目的根目錄路徑,必須寫全了,這樣系統(tǒng)才能找到應(yīng)用;
/home/wwwroot/project/runtime/log/task.log 這部分是執(zhí)行任務(wù)產(chǎn)生的日志文件路徑,文件若是沒有會自動創(chuàng)建。
2. 保存并退出,用crontab -l 命令查看crontab命令。
第四步:查看執(zhí)行日志
查看文件中配置的日志文件:用cat 文件名 或者tail -f 命令查看都行。
到此這篇關(guān)于ThinkPHP實現(xiàn)定時任務(wù)的操作步驟的文章就介紹到這了,更多相關(guān)ThinkPHP定時任務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
php常用字符串長度函數(shù)strlen()與mb_strlen()用法實例分析
這篇文章主要介紹了php常用字符串長度函數(shù)strlen()與mb_strlen()用法,結(jié)合實例形式分析了php字符串長度函數(shù)strlen()與mb_strlen()功能、用法及相關(guān)操作注意事項,需要的朋友可以參考下2019-06-06
PHP imagecreatefrombmp 從BMP文件或URL新建一圖像
大家都知道php GD庫可方便的從URL新建一圖像, GD中有imagecreatefromjpeg(),imagecreatefromPNG()....等2012-07-07
php 遍歷數(shù)據(jù)表數(shù)據(jù)并列表橫向排列的代碼
下面是個例子:表格橫向排列例子2009-09-09

