当前位置: 首页 > 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;这…...

避坑指南:Python操作Word文档最常见的5个错误(python-docx实战心得)

Python-docx实战避坑指南&#xff1a;5个高频错误与解决方案 在自动化办公场景中&#xff0c;Python操作Word文档的需求日益增长&#xff0c;而python-docx库作为主流工具&#xff0c;其易用性背后隐藏着不少"暗礁"。许多开发者在基础教程阶段一帆风顺&#xff0c;却…...

RGBLEDBlender:嵌入式RGB LED色彩混合与动态控制框架

1. RGBLEDBlender 库深度解析&#xff1a;面向嵌入式系统的 RGB 色彩混合与动态控制框架RGBLEDBlender 是一个轻量级、面向硬件的 RGB LED 色彩混合库&#xff0c;专为资源受限的微控制器平台&#xff08;尤其是 Arduino 生态&#xff09;设计。该库由 Erik Sikich 于 2016 年 …...

ESLyric歌词源高效配置与避坑指南:Foobar2000用户进阶教程

ESLyric歌词源高效配置与避坑指南&#xff1a;Foobar2000用户进阶教程 【免费下载链接】ESLyric-LyricsSource Advanced lyrics source for ESLyric in foobar2000 项目地址: https://gitcode.com/gh_mirrors/es/ESLyric-LyricsSource ESLyric-LyricsSource是Foobar2000…...

深度学习驱动的图像去雾:2023年最新算法与应用实践

1. 图像去雾技术的现状与挑战 清晨打开窗户&#xff0c;如果外面雾气弥漫&#xff0c;我们往往会等雾散了再拍照。但计算机视觉系统可没这个耐心——自动驾驶汽车必须实时看清路况&#xff0c;无人机巡检得在雾天正常工作。这就是图像去雾技术存在的意义。2023年&#xff0c;随…...

Simcenter Amesim 2023与Matlab 2023a联合仿真:从环境配置到实战例程详解

1. 联合仿真环境搭建前的准备工作 在开始Simcenter Amesim 2023与Matlab 2023a的联合仿真之前&#xff0c;我们需要做好充分的准备工作。这就像盖房子前要打好地基一样重要&#xff0c;否则后续工作可能会遇到各种意想不到的问题。 首先说说硬件要求。根据我的实测经验&#xf…...

[特殊字符]空间智能目标追踪系统:从“看视频”到“掌控空间”的技术跃迁——多模态识别 × 空间建模 × 轨迹预测,让视频系统具备“感知与决策能力”[特殊字符] 视频系统的终极形态,不是记录世

&#x1f6a8;空间智能目标追踪系统&#xff1a;从“看视频”到“掌控空间”的技术跃迁——多模态识别 空间建模 轨迹预测&#xff0c;让视频系统具备“感知与决策能力”&#x1f4a5; 视频系统的终极形态&#xff0c;不是记录世界&#xff0c;而是理解世界。一、系统定位&am…...

多模态数字人智能交互平台源码获取方式,支持语音克隆+实时渲染,可商用

温馨提示&#xff1a;文末有资源获取方式最近“龙虾AI”的热度很高&#xff0c;似乎人人都想养一个属于自己的数字员工。但现实是&#xff0c;这类技术对普通用户并不友好&#xff1a;部署需要代码、配置需要专人、调试更是门槛重重。更别提高昂的Token消耗&#xff0c;轻度使用…...

用DolphinScheduler实现数仓自动化:从零搭建ETL工作流实战

用DolphinScheduler构建电商数仓ETL流水线&#xff1a;实战设计与优化指南 电商平台每天产生的TB级订单数据&#xff0c;如何转化为精准的用户画像和实时销售报表&#xff1f;本文将带你从零搭建一个基于DolphinScheduler的自动化数据处理流水线&#xff0c;解决实际业务场景中…...

Homebrew卸载与重装指南:彻底清理残留文件的正确姿势

Homebrew深度清理与重装实战&#xff1a;从残留文件追踪到ARM架构优化 每次系统升级或开发环境切换时&#xff0c;那些隐藏在系统深处的Homebrew残留文件就像房间里扫不尽的灰尘——明明已经卸载了所有公式&#xff0c;却在重新安装时遇到各种诡异的权限错误或版本冲突。作为m…...

Gemma-3-12b-it实战教程:对接企业微信/钉钉机器人实现图文消息自动解析

Gemma-3-12b-it实战教程&#xff1a;对接企业微信/钉钉机器人实现图文消息自动解析 1. 引言&#xff1a;当多模态AI遇上企业协作 想象一下这个场景&#xff1a;你的同事在企业微信群里发了一张复杂的业务流程图&#xff0c;问“这个流程的第三步有什么风险&#xff1f;”或者…...