ThinkPHP框架——实现定时任务,定时更新、清理数据
yuyutoo 2024-11-16 02:39 6 浏览 0 评论
大家好,我是小蜗牛,今天给大家分享一下,如何用ThinkPHP5.1.*版本实现定时任务,
例如凌晨12点更新数据、每隔10秒检测过期会员、每隔几分钟发送请求保证ip的活性等
本次分享,主要用到一个名为EasyTask的扩展。
那么什么是EasyTask呢?又怎么安装呢?
什么是EasyTask
EasyTask是一款简单易用的PHP常驻内存定时器,可以用它来完成重复运行的任务(如订单超时自动取消,短信邮件异步推送,队列/消费者/频道订阅者等等),甚至处理Crontab计划任务(如每天凌晨1点-3点同步DB数据,每月1号生成月度统一报表,每晚10点重启nginx服务器等等),工具包同时支持windows、linux、mac环境运行。与之相似的还有Workman等工具。
这里是EasyTask的官方文档地址:https://gitee.com/392223903/EasyTask
如何安装EasyTask(这里以Thinkphp框架为例)
首先进入你的thinkphp目录下,使用composer进行安装,使用如下指令:
composer require easy-task/easy-tas
如何使用EasyTask
关于如何使用EasyTask这个组件,需要配合thinkphp中的创建自定义指令功能。
当你安装好EasyTask后(这里默认你已经安装好,如果安装过程中出现问题,请根据代码提示搜索解决方案)
1、在thinkphp框架中创建一个自定义命令类文件,这里我新增的是一个名为Task.php的文件,路径是:application/common/command/Task.php
2、Task.php中的代码:
<?php
namespace app\common\command;
use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\Output;
use app\api\utils\News;
class Task extends Command
{
// 配置
protected function configure()
{
//设置名称为task
$this->setName('task')
//增加一个命令参数,用于获取输入操控参数
->addArgument('action', Argument::OPTIONAL, "action")
->addArgument('force', Argument::OPTIONAL, "force");
}
// 执行逻辑
protected function execute(Input $input, Output $output)
{
//获取输入参数
$action = trim($input->getArgument('action'));
$force = trim($input->getArgument('force'));
// 配置任务
// 创建EasyTask对象
$task = new \EasyTask\Task();
// 设置记录运行时目录(日志或缓存目录)
$task->setRunTimePath('./runtime/viplog/');
// 设置常驻内存
$task->setDaemon(true);
// 添加类的方法类型定时任务(同时支持静态方法)(开启1个进程,每隔10秒执行1次)
// 还有其余用法,欢迎查看官方文档,根据官方文档自定义方法
// 这里我设置每6小时执行一下News类中的upNews方法。
$task->addClass(News::class, 'upNews','upnews' ,21600, 1);
// 根据命令执行
if ($action == 'start')
{
$task->start();
}
elseif ($action == 'status')
{
$task->status();
}
elseif ($action == 'stop')
{
$force = ($force == 'force'); //是否强制停止
$task->stop($force);
}
else
{
exit('Command is not exist');
}
}
}
3、配置application/command.php文件
<?php
return [
'app\common\command\Task',
];
4、配置完成,接下来就是启动定时任务,让其常驻于内存(回到根目录运行)
// php think 定时任务名 动作
启动任务: php think task start
查询任务: php think task status
普通关闭: php think task stop
强制关闭: php think task stop force
Ps:由于我使用的是宝塔,会自动禁用某些关键函数,根据宝塔提示的禁用函数一个个解封即可。
删除宝塔面板中的禁用函数即可。
5、运行结果图
运行效果:
从启动脚本的时间开始,每个6小时,自动运行指定目录下的类中方法(通过静态方法调用),这里的方法可以自定义逻辑,主要是如何设定让它隔一段时间自动运行。
总结
因为第一次使用定时任务,所以采用的是EasyTask这个包,实现定时任务还有很多的解决方案,这里只是给大家提供一个我所使用过的定时任务解决方案。
谢谢大家的阅读,我是小蜗牛,如果觉得对你有帮助
麻烦请点个赞,点个关注吧~Thanks?(?ω?)?
相关推荐
- 网络规划建设原来也可以这么简单!
-
废话少说,直接上干货。天气炎热,请各位看官老爷静心阅读。整体思路下图是关于网络建设的所有相关领域,接下来我为大家逐一讲解。网络分层...
- 网络规划设计师笔记-第 1 章 计算机网络原理
-
计算机网络原理1.1计算机网络概论(P1-10)...
- 别输在远见上,网工这样做职业规划,比啥都强
-
01职业中的规划,人生中的buff“职业规划“这个词,其实对很多年轻人,包括曾经年轻的我来说,都不屑一提。...
- 网络规划设计师学习中(个人自学笔记分享1),有一起学习的吗?
-
网络规划设计师,上午考试内容学习:第一章:计算机网络概述(上部分):如果你也在一起学习,那么我们来一起学习吧!坚持1年,争取明年一次性通过!...
- 在微服务中使用 ASP.NET Core 实现事件溯源和 CQRS
-
概述:事件溯源和命令查询责任分离(CQRS)已成为解决微服务设计的复杂性的强大架构模式。基本CQRS表示形式在本文中,我们将探讨ASP.NETCore如何使你能够将事件溯源和CQRS...
- 用 Nginx 部署 ASP.NET Core 应用程序
-
用Nginx部署ASP.NETCore应用程序步骤如下:在Linux中安装.NETCore运行时和Nginx:...
- Asp.net Core启动流程讲解(一)(asp.net core 入门)
-
asp.netcore默认项目包括项目根目录级的Startup.cs、Program.cs、appsettings.json(appsettings.Development.json)launch...
- 十天学会ASP之第五天(十天学会asp教程)
-
学习目的:学会数据库的基本操作1(写入记录)数据库的基本操作无非是:查询记录,写入记录,删除记录,修改记录。今天我们先学习写入记录。先建立一个表单:<formname="form1"met...
- ASP.NET Core 的 WebApplication 类
-
ASP.NETCore提供了3个主机类(Host)。这些类用于配置应用、管理生命周期和启动Web服务。...
- ASP.NET Core中的键控依赖注入(.net依赖注入原理)
-
大家好,我是深山踏红叶,今天我们来聊一聊ASP.NETCore中的FromKeyedServices,它是在.Net8中引入的。这一特性允许通过键(如字符串或枚举)来注册和检索依赖注入(D...
- Asp.net常用方法及request和response-a
-
asp.net教程asp.net常用方法:1、Request.UrlReferrer请求的来源,可以根据这个判断从百度搜的哪个关键词、防下载盗链、防图片盗链,可以伪造(比如迅雷)。(使用全局一般处理...
- asp.net常考面试题(aspnet题库)
-
asp.net常考面试题一,列举ASP.Net页面之间传递值的几种方式?1,使用QueryString,如:......?id=1;response.Redirect()......2,使用Sessi...
- 在Windows系统搭建.NET Core环境并创建运行ASP.NET网站
-
微软于6月27日在红帽DevNation峰会上正式发布了.NETCore1.0、ASP.NET1.0和EntityFrameworkCore1.0,其将全部支持Windows、OSX和...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)