宽容厚德 發表於 2026-5-3 17:26:48

ThinkPHP实现定时任务的操作步骤

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">第一步:分析需求</a></li><li><a href="#_label1">第二步:开始编写代码</a></li><ul class="second_class_ul"><li><a href="#_lab2_1_0">1. 在tp框架中编写逻辑代码</a></li><li><a href="#_lab2_1_1">2. 测试代码</a></li></ul><li><a href="#_label2">第三步:配置crontab</a></li><ul class="second_class_ul"><li><a href="#_lab2_2_2">1. 打开终端,输入crontab -e 命令,编写crontab文件</a></li><li><a href="#_lab2_2_3">2. 保存并退出,用crontab -l 命令查看crontab命令。</a></li></ul><li><a href="#_label3">第四步:查看执行日志</a></li><ul class="second_class_ul"></ul></ul></div><p>接到一个需求:定时检查设备信息,2分钟没有心跳的机器,推送消息给相关人员,用thinkphp5框架,利用框架自带的任务功能与crontab配合来完成定时任务。</p>
<p class="maodian"><a name="_label0"></a></p><h2>第一步:分析需求</h2>
<ul><li>先写获取设备信息,2分钟之内没有心跳的设备信息数据的功能;</li><li>再写推送消息给相关人员的功能;</li><li>写定时任务,调用推送消息的功能,将设备故障的数据通过飞书推送给相关人员处理;</li></ul>
<p class="maodian"><a name="_label1"></a></p><h2>第二步:开始编写代码</h2>
<p>这个需求的难点在于推送消息和利用框架编写定时任务的功能,本文就定时任务的功能进行代码展示。</p>
<p>用的框架是thinkphp5框架,利用框架自带的任务功能与crontab配合来完成定时任务。</p>
<p class="maodian"><a name="_lab2_1_0"></a></p><h3>1. 在tp框架中编写逻辑代码</h3>
<p>创建command模块,定义任务类:在项目application目录下创建command模块文件夹-&gt;创建任务类文件,继承</p>
<div class="jb51code"><pre class="brush:php;">think\console\Command;
think\console\Input;
think\console\Output;</pre></div>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202409/2024090815561649.png" /></p>
<ul><li>编写任务逻辑代码:通过实现configure方法来设置任务的名称和描述,execute方法来实现执行任务的逻辑,可以调用其他的方法来实现具体的任务逻辑,例如:发送通知、处理数据等。</li><li>配置命令文件:在项目的application目录下的command.php文件中配置,返回一个数组,包含所有类的命名空间,这样thinkphp就知道可以执行的命令。</li></ul>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202409/2024090815561650.png" /></p>
<p>下面贴上代码,仅供参考:</p>
<div class="jb51code"><pre class="brush:php;">&lt;?php

namespace app\command;
use app\admin\controller\Message;
use think\console\Command;
use think\console\Input;
use think\console\Output;
/**
* 定时任务类
* Class Task
* User:赫陈
* Date: 2024-07-02
*/
class TaskF extends Command
{

    // 设置命令名称和描述
    protected function configure()
    {
      $this-&gt;setName('sendmessage')
            -&gt;setDescription('设备故障发送消息到飞书群');
    }

    // 执行命令的逻辑
    protected function execute(Input $input, Output $output)
    {
      // 在这里编写具体的任务逻辑,例如发送消息给用户
      $output-&gt;writeln("开始发送消息...");

      // 假设有一个方法 sendMessageToUser() 用于发送消息
      $res = $this-&gt;sendMessageToUser();
      $output-&gt;writeln("消息发送结果:".$res["message"]);
      if($res['status'] != 'no'){
            $output-&gt;writeln("消息发送完成!");
      }
    }

    private function sendMessageToUser()
    {
      // 实现发送消息的具体逻辑,例如调用API或数据库操作等
      $Message = new Message();
      $res = $Message -&gt; sendMessage();
      return $res;
    }




}</pre></div>
<p class="maodian"><a name="_lab2_1_1"></a></p><h3>2. 测试代码</h3>
<p>逻辑代码编写完后,打开终端,输入thinkphp的命令开始测试</p>
<p>命令:php think sendmessage</p>
<p>回车执行命令</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202409/2024090815561751.png" /></p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202409/2024090815561752.png" /></p>
<p class="maodian"><a name="_label2"></a></p><h2>第三步:配置crontab</h2>
<p class="maodian"><a name="_lab2_2_2"></a></p><h3>1. 打开终端,输入crontab -e 命令,编写crontab文件</h3>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202409/2024090815561753.png" /></p>
<p>输入如下命令:</p>
<div class="jb51code"><pre class="brush:php;">*/5 * * * * /usr/php/bin/php /home/www/project/think sendtofeishu &gt;&gt;/home/wwwroot/tuoluo/runtime/log/task.log 2&gt;&amp;1</pre></div>
<p>解释:</p>
<p>命令*号的部分为分、时、日、月、周,把想要执行的时间写上,这个是每5分钟执行一次;</p>
<p>/usr/php/bin/php 这部分是php的安装路径,必须得写这个,要不然系统找不到可执行的系统;</p>
<p>/home/www/project/think sendtofeishu 这部分是项目的根目录路径,必须写全了,这样系统才能找到应用;</p>
<p>/home/wwwroot/project/runtime/log/task.log 这部分是执行任务产生的日志文件路径,文件若是没有会自动创建。</p>
<p class="maodian"><a name="_lab2_2_3"></a></p><h3>2. 保存并退出,用crontab -l 命令查看crontab命令。</h3>
<p class="maodian"><a name="_label3"></a></p><h2>第四步:查看执行日志</h2>
<p>查看文件中配置的日志文件:用cat 文件名 或者tail -f 命令查看都行。</p>
頁: [1]
查看完整版本: ThinkPHP实现定时任务的操作步骤