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ù)庫(kù)操作等
$Message = new Message();
$res = $Message -> sendMessage();
return $res;
}
}2. 測(cè)試代碼
邏輯代碼編寫完后,打開終端,輸入thinkphp的命令開始測(cè)試
命令: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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
提高define性能的php擴(kuò)展hidef的安裝和使用
在apache啟動(dòng)前,PHP啟動(dòng)時(shí)創(chuàng)建并初始化了這些常量,這樣就不需要在php里define常量了,性能自然沒有任何問題了!2011-06-06
php常用字符串長(zhǎng)度函數(shù)strlen()與mb_strlen()用法實(shí)例分析
這篇文章主要介紹了php常用字符串長(zhǎng)度函數(shù)strlen()與mb_strlen()用法,結(jié)合實(shí)例形式分析了php字符串長(zhǎng)度函數(shù)strlen()與mb_strlen()功能、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-06-06
ThinkPHP中的接口的安全防護(hù)措施小結(jié)
這篇文章主要為大家詳細(xì)介紹了一些在?ThinkPHP?中對(duì)接口進(jìn)行防護(hù)的措施,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-01-01
php實(shí)現(xiàn)數(shù)組按拼音順序排序的方法
這篇文章主要介紹了php實(shí)現(xiàn)數(shù)組按拼音順序排序的方法,涉及php漢字與拼音的轉(zhuǎn)換及數(shù)組遍歷、排序相關(guān)操作技巧,需要的朋友可以參考下2017-05-05
整理的9個(gè)實(shí)用的PHP庫(kù)簡(jiǎn)介和下載
9個(gè)非常有用的PHP類庫(kù),相信一定可以為你的WEB開發(fā)提供更好和更為快速的方法。2010-11-11
PHP中十六進(jìn)制顏色與RGB顏色值互轉(zhuǎn)的方法
今天小編就為大家分享一篇關(guān)于PHP中十六進(jìn)制顏色與RGB顏色值互轉(zhuǎn)的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03
PHP imagecreatefrombmp 從BMP文件或URL新建一圖像
大家都知道php GD庫(kù)可方便的從URL新建一圖像, GD中有imagecreatefromjpeg(),imagecreatefromPNG()....等2012-07-07
php 遍歷數(shù)據(jù)表數(shù)據(jù)并列表橫向排列的代碼
下面是個(gè)例子:表格橫向排列例子2009-09-09
php實(shí)現(xiàn)對(duì)文件壓縮簡(jiǎn)單的方法
在本篇文章里我們給大家整理的是關(guān)于php如何實(shí)現(xiàn)對(duì)文件壓縮的實(shí)例內(nèi)容,有需要的朋友們參考學(xué)習(xí)下。2019-09-09

