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

 更新时间:2024年09月08日 15:59:39   作者:行走的码农霖悦  
定时任务就是在特定的时间点执行一些特定的任务,比如,每天晚上12点自动清空数据库,或者每分钟检查一次服务器资源使用情况,那么,如何使用ThinkPHP来实现这些定时任务呢?本文小编给大家介绍了ThinkPHP实现定时任务的操作步骤,需要的朋友可以参考下

接到一个需求:定时检查设备信息,2分钟没有心跳的机器,推送消息给相关人员,用thinkphp5框架,利用框架自带的任务功能与crontab配合来完成定时任务。

第一步:分析需求

  • 先写获取设备信息,2分钟之内没有心跳的设备信息数据的功能;
  • 再写推送消息给相关人员的功能;
  • 写定时任务,调用推送消息的功能,将设备故障的数据通过飞书推送给相关人员处理;

第二步:开始编写代码

这个需求的难点在于推送消息和利用框架编写定时任务的功能,本文就定时任务的功能进行代码展示。

用的框架是thinkphp5框架,利用框架自带的任务功能与crontab配合来完成定时任务。

1. 在tp框架中编写逻辑代码

创建command模块,定义任务类:在项目application目录下创建command模块文件夹->创建任务类文件,继承

think\console\Command;
think\console\Input;
think\console\Output;

  • 编写任务逻辑代码:通过实现configure方法来设置任务的名称和描述,execute方法来实现执行任务的逻辑,可以调用其他的方法来实现具体的任务逻辑,例如:发送通知、处理数据等。
  • 配置命令文件:在项目的application目录下的command.php文件中配置,返回一个数组,包含所有类的命名空间,这样thinkphp就知道可以执行的命令。

下面贴上代码,仅供参考:

<?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->setName('sendmessage')
            ->setDescription('设备故障发送消息到飞书群');
    }
 
    // 执行命令的逻辑
    protected function execute(Input $input, Output $output)
    {
        // 在这里编写具体的任务逻辑,例如发送消息给用户
        $output->writeln("开始发送消息...");
 
        // 假设有一个方法 sendMessageToUser() 用于发送消息
        $res = $this->sendMessageToUser();
        $output->writeln("消息发送结果:".$res["message"]);
        if($res['status'] != 'no'){
            $output->writeln("消息发送完成!");
        }
    }
 
    private function sendMessageToUser()
    {
        // 实现发送消息的具体逻辑,例如调用API或数据库操作等
        $Message = new Message();
        $res = $Message -> sendMessage();
        return $res;
    }
 
 
 
 
}

2. 测试代码

逻辑代码编写完后,打开终端,输入thinkphp的命令开始测试

命令:php think sendmessage

回车执行命令

第三步:配置crontab

1. 打开终端,输入crontab -e 命令,编写crontab文件

输入如下命令:

*/5 * * * * /usr/php/bin/php /home/www/project/think sendtofeishu >>  /home/wwwroot/tuoluo/runtime/log/task.log 2>&1

解释:

命令*号的部分为分、时、日、月、周,把想要执行的时间写上,这个是每5分钟执行一次;

/usr/php/bin/php 这部分是php的安装路径,必须得写这个,要不然系统找不到可执行的系统;

/home/www/project/think sendtofeishu 这部分是项目的根目录路径,必须写全了,这样系统才能找到应用;

/home/wwwroot/project/runtime/log/task.log 这部分是执行任务产生的日志文件路径,文件若是没有会自动创建。

2. 保存并退出,用crontab -l 命令查看crontab命令。

第四步:查看执行日志

查看文件中配置的日志文件:用cat 文件名 或者tail -f 命令查看都行。

到此这篇关于ThinkPHP实现定时任务的操作步骤的文章就介绍到这了,更多相关ThinkPHP定时任务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • PHP PDO fetch 模式各种参数的输出结果一览

    PHP PDO fetch 模式各种参数的输出结果一览

    这篇文章主要介绍了PHP PDO fetch 模式各种参数的输出结果一览,本文目的是方便根据实际需求选择不同的参数,从而不用一个一个测试过去,需要的朋友可以参考下
    2015-01-01
  • PHP中魔术变量__METHOD__与__FUNCTION__的区别

    PHP中魔术变量__METHOD__与__FUNCTION__的区别

    这篇文章主要介绍了PHP中魔术变量__METHOD__与__FUNCTION__的区别,是深入学习PHP程序设计所必须掌握的概念,非常具有实用价值,需要的朋友可以参考下
    2014-09-09
  • php页面缓存方法小结

    php页面缓存方法小结

    这篇文章主要介绍了php页面缓存方法,实例总结了常用的页面缓存函数的用法,并给出了一个完整的缓存实例,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • PHP实现SMTP邮件的发送实例

    PHP实现SMTP邮件的发送实例

    在本篇文章中我们给大家详细分享了PHP实现SMTP邮件的发送的相关实例内容,有兴趣的朋友们可以学习下。
    2018-09-09
  • PHP基于数组实现的分页函数实例

    PHP基于数组实现的分页函数实例

    这篇文章主要介绍了PHP基于数组实现的分页函数实例,是非常实用的一个技巧,需要的朋友可以参考下
    2014-08-08
  • PHP实现的通过参数生成MYSQL语句类完整实例

    PHP实现的通过参数生成MYSQL语句类完整实例

    这篇文章主要介绍了PHP实现的通过参数生成MYSQL语句类,结合完整实例形式分析了生成MYSQL语句类的实现与使用技巧,需要的朋友可以参考下
    2016-04-04
  • PHP6 中可能会出现的新特性预览

    PHP6 中可能会出现的新特性预览

    PHP核心团队开发者Pierre Joye近日在官网上贴出了PHP6中可能会出现的新特性,之所以说是“可能会出现”,是因为目前PHP6项目还处于阶段,这些特性还只是一个想法,还需要讨论,随时都有可能变更
    2014-04-04
  • 自定义session存储机制避免会话保持问题

    自定义session存储机制避免会话保持问题

    PHP服务端session以文件的方式存储,当用户访问量过大时就会面临会话保持的问题,下面有两种解决方案,需要的朋友可以参考下
    2014-10-10
  • PHP匿名函数(闭包函数)详解

    PHP匿名函数(闭包函数)详解

    今天小编就为大家分享一篇关于PHP匿名函数(闭包函数)详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • php建立Ftp连接的方法

    php建立Ftp连接的方法

    这篇文章主要介绍了php建立Ftp连接的方法,实例分析了php操作FTP的相关函数及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03

最新评论