当前位置: 首页 > news >正文

Webman中实现定时任务

文章目录

  • Webman中实现定时任务
    • 一、引言
    • 二、安装与配置
      • 1、安装Crontab组件
      • 2、创建进程文件
      • 3、配置进程文件随Webman启动
      • 4、重启Webman
      • 5、Cron表达式(补充)
      • 例子
    • 三、使用示例
    • 四、总结

Webman中实现定时任务

一、引言

在现代的后端开发中,定时任务是一个常见的需求,用于执行周期性的作业,如数据备份、定时清理缓存等。Webman作为一个高性能的PHP开发框架,提供了强大的定时任务支持,类似于Linux的crontab,但支持到秒级别的定时。本文将详细介绍如何在Webman中实现定时任务。

二、安装与配置

1、安装Crontab组件

首先,需要安装workerman/crontab组件,它提供了类似于Linux的crontab功能。通过Composer可以轻松安装:

composer require workerman/crontab

2、创建进程文件

在Webman项目中,新建一个进程文件process/Task.php,这个文件将用于定义和执行定时任务。
在这里插入图片描述

<?php
namespace process;
use Workerman\Crontab\Crontab;class Task
{public function onWorkerStart(){// 每秒执行一次new Crontab('*/1 * * * * *', function(){echo date('Y-m-d H:i:s')."\n";});// 每5秒执行一次new Crontab('*/5 * * * * *', function(){echo date('Y-m-d H:i:s')."\n";});// 每分钟执行一次new Crontab('0 */1 * * * *', function(){echo date('Y-m-d H:i:s')."\n";});// 每天的7点50执行new Crontab('50 7 * * *', function(){echo date('Y-m-d H:i:s')."\n";});}
}

3、配置进程文件随Webman启动

打开Webman的配置文件config/process.php,添加以下配置以确保Task进程随Webman启动:

return [// 其他配置...'task' => ['handler'  => process\Task::class],
];

4、重启Webman

配置完成后,需要重启Webman以使定时任务生效。需要注意的是,定时任务不会立即执行,它们将在下一分钟开始计时执行。

在这里插入图片描述

5、Cron表达式(补充)

Cron表达式是一种强大的用于配置定时任务的方法,它由六个或七个字段组成,每个字段代表一个时间单位。这些字段分别对应于:

  1. 秒(0-59)
  2. 分(0-59)
  3. 小时(0-23)
  4. 日(1-31)
  5. 月(1-12 或 JAN-DEC)
  6. 星期(0-7 或 SUN-SAT,其中0和7都代表星期日)
  7. 年(可选字段,通常是空的,或者指定特定的年份)

每个字段可以包含以下类型的值:

  • 具体数值:例如,5表示在第5秒、第5分钟或第5小时。
  • 范围:例如,10-12 (在分钟字段中表示从第10分钟到第12分钟)
  • 列表:例如,1,2,3 (在小时字段中表示第1小时、第2小时和第3小时)
  • 步长:例如,*/2 (在分钟字段中表示每2分钟)
  • 特殊字符
    • *:任何可能的值(对于“日”和“星期”字段,*不包括边界值,例如,*/2在“日”字段中表示每两天,而不是每两分钟)。
    • -:范围(如上面提到的10-12)。
    • ,:列表(如上面提到的1,2,3)。
    • /:步长(如上面提到的*/2)。

例子

以下是一些Cron表达式的例子和它们的解释:

  • 0 0 * * *:在每小时的第0分钟第0秒执行。
  • 0 15 10 * *:在每天的10点15分执行。
  • 0 0/5 14 * *:在每天下午2点到3点之间,每5分钟执行一次。
  • 0 0 1,15 * *:在每天的凌晨1点和下午3点执行。
  • 0 0/30 8-17 * *:从早上8点到下午5点,每半小时执行一次。
  • 0 0 9-17 * 1-5:在工作日的每天9点到下午5点之间,每小时执行一次。
  • 0 0 0 1 * 1:在每个月的第一天的午夜执行。
  • 0 0 10,14,16 * * 1-5:在工作日的每天上午10点、下午2点和下午4点执行。

Cron表达式非常灵活,可以根据需要进行各种复杂的配置。在使用时,确保理解每个字段的含义和可以取的值,以便正确地设置定时任务。

三、使用示例

以下是一个简单的使用示例,展示了如何设置一个定时任务来每天9点发送一封邮件提醒:

在Webman项目中,新建一个进程文件process/EmailTask.php,这个文件将用于定义和执行定时发送邮件的任务。

<?php
namespace process;
use Workerman\Crontab\Crontab;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;class EmailTask
{public function onWorkerStart(){// 每天的9点发送邮件提醒new Crontab('0 9 * * * *', function(){$this->sendEmail();});}protected function sendEmail(){$mail = new PHPMailer(true);try {//Server settings$mail->isSMTP();$mail->Host       = 'your_smtp_server'; // Set the SMTP server to send through$mail->SMTPAuth   = true;$mail->Username   = 'your_email@example.com'; // SMTP username$mail->Password   = 'your_password'; // SMTP password$mail->SMTPSecure = 'tls'; // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` also accepted$mail->Port       = 587; // TCP port to connect to//Recipients$mail->setFrom('from@example.com', 'Mailer');$mail->addAddress('recipient@example.com', 'Joe User'); // Add a recipient// Content$mail->isHTML(true);$mail->Subject = 'Here is the subject';$mail->Body    = 'This is the HTML message body <b>in bold!</b>';$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';$mail->send();echo 'Email sent successfully';} catch (Exception $e) {echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";}}
}

在这里插入图片描述

四、总结

Webman通过workerman/crontab组件提供了强大的定时任务支持,使得开发者可以轻松地实现周期性任务。通过简单的配置和代码编写,就可以实现复杂的定时任务逻辑。这种方式不仅提高了开发效率,也使得应用的维护变得更加简单。


版权声明:本博客内容为原创,转载请保留原文链接及作者信息。

参考文章

  • Crontab定时任务-Webman手册

相关文章:

Webman中实现定时任务

文章目录 Webman中实现定时任务一、引言二、安装与配置1、安装Crontab组件2、创建进程文件3、配置进程文件随Webman启动4、重启Webman5、Cron表达式&#xff08;补充&#xff09;例子 三、使用示例四、总结 Webman中实现定时任务 一、引言 在现代的后端开发中&#xff0c;定时…...

《以 C++破局:人工智能系统可解释性的探索与实现》

在当今科技飞速发展的时代&#xff0c;人工智能已深度融入我们的生活&#xff0c;从医疗诊断到金融决策&#xff0c;从交通管控到司法审判&#xff0c;其影响力无处不在。然而&#xff0c;在这些涉及重大利益和社会影响的关键领域&#xff0c;人工智能系统却面临着严峻的信任危…...

C++:QTableWidget删除选中行(单行,多行即可)

转自博客&#xff1a; Qt C -在QTableWidget中删除行 - 腾讯云开发者社区 - 腾讯云 我的界面&#xff1a; 采集机器人位置和姿态信息并写入QTableWidget控件中 删除代码&#xff1a; 1.获取要删除行的索引 2.删除行 QList<QTableWidgetItem*> items ui->tableW…...

C++类中多线程的编码方式

问题 在C++代码中,一般的代码是需要封装在类里面,比如对象,方法等。否则就不能很好的利用C++面向对象的能力了。 但是这个方式在处理线程时会碰到一个问题。 考虑下面一个简单的场景: class demoC { public:std::thread t;int x;void threadFunc(){std::cout<<x&…...

数据湖的概念(包含数据中台、数据湖、数据仓库、数据集市的区别)--了解数据湖,这一篇就够了

文章目录 一、数据湖概念1、企业对数据的困扰2、什么是数据湖3、数据中台、数据湖、数据仓库、数据集市的区别 网上看了好多有关数据湖的帖子&#xff0c;还有数据中台、数据湖、数据仓库、数据集市的区别的帖子&#xff0c;发现帖子写的都很多&#xff0c;而且专业名词很多&am…...

EDKII之安全启动详细介绍

文章目录 安全启动简介安全启动流程介绍签名过程BIOS实现小结 安全启动简介 安全启动&#xff08;Secure Boot&#xff09;是一种计算机系统的安全功能&#xff0c;旨在确保系统启动过程中只能加载经过数字签名的受信任的操作系统和启动加载程序。通过使用安全启动&#xff0c…...

原生js上传图片

无样式上传图片 创建一个 FormData 对象&#xff1a;这个对象可以用于存储数据。 将文件添加到 FormData 对象&#xff1a;通过 append() 方法&#xff0c;将用户选择的文件添加到 formData 对象中。 使用 fetch 发送请求&#xff1a;使用 fetch API 或者其他方法将 FormDat…...

使用torch==2.5.1版本用的清华源遇到的坑

解决安装torch后,torch.cuda.is_available()结果为false的问题 清华源下载到的torch2.5.1版本的Lib\site-packages\torch\version.py 其中&#xff0c;清华源指的是&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorchhttps://mirrors.tuna.tsinghua.…...

泷羽Sec-星河飞雪-BurpSuite之解码、日志、对比模块基础使用

免责声明 学习视频来自 B 站up主泷羽sec&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下代码、网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 泷羽sec官网&#xff1a;http…...

对拍详细使用方法

对拍的作用 对于我们在学校OJ&#xff0c;cf&#xff0c;牛客…各种只提供少量测试数据的题目&#xff0c;常常交上代码常常超时&#xff0c;能写出正确的暴力代码而题目要求的时间复杂度更低。然而这时你写出了能通过样例且时间复杂度更低的代码&#xff0c;但交上去就是错误…...

Python面向对象编程与模块化设计练习

需求&#xff1a; 编写一个BankAccount类&#xff0c;模拟银行账户功能&#xff1a; 属性&#xff1a;账户名、余额 方法&#xff1a;存款、取款、查询余额 使用模块将类和测试代码分离。 模块文件&#xff1a;bank_account.py 该模块包含 BankAccount 类。 class BankAccoun…...

Linux系统硬件老化测试脚本:自动化负载与监控

简介&#xff1a; 这篇文章介绍了一款用于Linux系统的自动化硬件老化测试脚本。该脚本能够通过对CPU、内存、硬盘和GPU进行高强度负载测试&#xff0c;持续运行设定的时长&#xff08;如1小时&#xff09;&#xff0c;以模拟长时间高负荷运行的环境&#xff0c;从而验证硬件的稳…...

搭建一个基于Web的文档管理系统,用于存储、共享和协作编辑文档

搭建一个基于Web的文档管理系统&#xff0c;用于存储、共享和协作编辑文档 本项目采用以下架构&#xff1a; NFS服务器: 负责存储文档资料。Web服务器: 负责提供文档访问和编辑功能。SELinux: 负责权限控制&#xff0c;确保文档安全。Git服务器: 负责存储文档版本历史&#x…...

排序学习整理(1)

1.排序的概念及运用 1.1概念 排序&#xff1a;所谓排序&#xff0c;就是使⼀串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作&#xff0c;以便更容易查找、组织或分析数据。 1.2运用 购物筛选排序 院校排名 1.3常见排序算法 2.实…...

《深入探究 Java 中的 boolean 类型》

在 Java 编程语言的世界里&#xff0c;boolean 类型虽然看似简单&#xff0c;却在程序的逻辑控制和决策中起着至关重要的作用。本文将带你深入了解 Java 中的 boolean 类型&#xff0c;从其基本概念、用法到实际应用场景&#xff0c;以及一些常见的注意事项。 一、boolean 类型…...

智享 AI 自动无人直播系统:打破地域与时间枷锁中小微企业的营销破局利器

中小微企业&#xff0c;在商业浪潮中恰似逐浪扁舟&#xff0c;常面临营销成本高、推广渠道窄、专业人才缺等 “暗礁”&#xff0c;而智享 AI 自动无人直播系统恰如精准导航的灯塔&#xff0c;助其破浪前行、突出重围。 成本维度&#xff0c;传统直播人力成本让中小微企业望而却…...

接口测试工具:reqable

背景 在众多接口测试工具中挑选出一个比较好用的接口测试工具。使用过很多工具&#xff0c;如Postman、Apifox、ApiPost等&#xff0c;基本上是同类产品&#xff0c;一般主要使用到的功能就是API接口和cURL&#xff0c;其他的功能目前还暂未使用到。 对比 性能方面&#xff…...

同时多平台git配置:GitHub和Gitee生成不同的SSH Key

文章目录 GitHub和Gitee生成不同的SSH Key步骤1&#xff1a;生成SSH Key步骤2&#xff1a;配置SSH配置文件步骤3&#xff1a;查看SSH公钥步骤4&#xff1a;将SSH公钥添加到GitHub和Gitee步骤5&#xff1a;测试SSH连接步骤6&#xff1a;添加remote远程库 GitHub和Gitee生成不同的…...

刷题计划day24 回溯(三)【复原 IP 地址】【子集】【子集 II】

⚡刷题计划day24 回溯&#xff08;三&#xff09;继续&#xff0c;回溯一共会有五个专题&#xff0c;敬请期待关注&#xff0c;可以点个免费的赞哦~ 往期可看专栏&#xff0c;关注不迷路&#xff0c; 您的支持是我的最大动力&#x1f339;~ 目录 题目一&#xff1a;复原 IP…...

从“找三角形”讲“等腰三角形”

【题目】 周长为11&#xff0c;且各边长均为整数的三角形有哪些&#xff1f; 【答案】 四种&#xff0c;边长分别为&#xff1a; 2 4 5 3 3 5 1 5 5 3 4 4 【解析】 讲解等腰三角形的概念时&#xff0c;传统方法一般向学生展示一个等腰三角形的实物模型&#xff0c;这…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例

目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码&#xff1a;冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...

C++ 类基础:封装、继承、多态与多线程模板实现

前言 C 是一门强大的面向对象编程语言&#xff0c;而类&#xff08;Class&#xff09;作为其核心特性之一&#xff0c;是理解和使用 C 的关键。本文将深入探讨 C 类的基本特性&#xff0c;包括封装、继承和多态&#xff0c;同时讨论类中的权限控制&#xff0c;并展示如何使用类…...

基于Uniapp的HarmonyOS 5.0体育应用开发攻略

一、技术架构设计 1.混合开发框架选型 &#xff08;1&#xff09;使用Uniapp 3.8版本支持ArkTS编译 &#xff08;2&#xff09;通过uni-harmony插件调用原生能力 &#xff08;3&#xff09;分层架构设计&#xff1a; graph TDA[UI层] -->|Vue语法| B(Uniapp框架)B --&g…...