ThinkPHP定时任务是怎样实现的?

news/2024/7/8 9:18:55 标签: android

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

第一步:分析需求

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

第二步:开始编写代码

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

用的框架是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 命令查看都行。


http://www.niftyadmin.cn/n/5536936.html

相关文章

从0构建一款appium-inspector工具

上一篇博客从源码层面解释了appium-inspector工具实现原理&#xff0c;这篇博客将介绍如何从0构建一款简单的类似appium-inspector的工具。如果要实现一款类似appium-inspector的demo工具&#xff0c;大致需要完成如下六个模块内容 启动 Appium 服务器连接到移动设备或模拟器启…

目标检测之非极大值抑制——NMS

非极大值抑制&#xff08;Non-Maximum Suppression, NMS&#xff09;是一种在目标检测任务中常用的后处理技术&#xff0c;主要用于消除冗余的检测框&#xff0c;确保每个目标仅保留一个最具代表性的检测框。NMS的主要目的是减少多个检测框重叠在同一个目标上的情况&#xff0c…

技术分享:直播平台如何开发并接入美颜SDK

本篇文章&#xff0c;笔者将分享直播平台如何开发并接入美颜SDK的技术细节与步骤。 一、选择合适的美颜SDK 首先&#xff0c;选择一款适合的美颜SDK非常重要。市面上有很多优秀的美颜SDK供应商&#xff0c;选择时应考虑以下因素&#xff1a; 功能丰富性&#xff1a;支持美白…

谷粒商城学习-10-docker安装mysql

文章目录 一&#xff0c;拉取MySQL镜像1&#xff0c;搜索MySQL的Docker镜像2&#xff0c;拉取MySQL镜像3&#xff0c;查看已经拉取的镜像 二&#xff0c;创建、启动MySQL容器1&#xff0c;使用docker run创建启动容器2&#xff0c;使用docker ps查看运行状态的容器3&#xff0c…

勒索病毒入门级理解

勒索病毒是泛指一切通过锁定被感染者计算机系统或文件并施以敲诈勒索的新型计算机病毒。其特点和相关信息可以归纳如下&#xff1a; 一、定义与特征 定义&#xff1a;勒索病毒是一种恶意软件&#xff0c;它通过加密用户的文件或阻止用户访问计算机操作系统&#xff0c;以此要…

基于FreeRTOS+STM32CubeMX+LCD1602+AD5621(SPI接口)的DAC控制输出Proteus仿真

一、仿真原理图: 二、运行效果: 三、STM32CubeMX配置: 1)、GPIO配置: 2)、freertos配置: 四、软件部分: 1)、main主函数: /* USER CODE BEGIN Header */ /** ****************************************************************************** * @file …

如何选择视频号矩阵系统源码:关键要素与决策指南

在短视频和直播内容迅速崛起的今天&#xff0c;视频号矩阵系统源码成为了企业和个人创作者高效管理视频内容的重要工具。选择合适的视频号矩阵系统源码&#xff0c;可以极大提升内容发布的效率和质量&#xff0c;同时优化用户体验。本文将提供一套选择视频号矩阵系统源码的指南…

N-gram的pytorch代码实现

代码实现 import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optim import matplotlib.pyplot as plt import matplotlib.ticker as tickerdef tri_gramizer(test_sentence):# 将单词序列转化为数据元组列表&#xff0c;# 其中的每个…