Webman中实现定时任务

news2024/12/26 22:09:40

文章目录

  • 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手册

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2251955.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android笔记(三十四):封装带省略号图标结尾的TextView

背景 项目需求需要实现在文本末尾显示一个icon&#xff0c;如果文本很长时则在省略号后面显示icon&#xff0c;使用TextView自带的drawableEnd可以实现&#xff0c;但是如果文本换行了则会显示在TextView垂直居中的位置&#xff0c;不满足要求&#xff0c;于是有了本篇的自定义…

多线程篇-8--线程安全(死锁,常用保障安全的方法,安全容器,原子类,Fork/Join框架等)

1、线程安全和不安全定义 &#xff08;1&#xff09;、线程安全 线程安全是指一个类或方法在被多个线程访问的情况下可以正确得到结果&#xff0c;不会出现数据不一致或其他错误行为。 线程安全的条件 1、原子性&#xff08;Atomicity&#xff09; 多个操作要么全部完成&a…

Day1 生信新手笔记

生信新手笔记 生信学习第一天笔记打卡。 转录组学中&#xff1a; 上游分析-基于linux&#xff0c;包括质控、过滤、比对、定量&#xff1b; 下游分析-基于R语言&#xff0c;包括差异分析、富集分析、可视化。 1. 级别标题 一个井号加空格 就是一级标题&#xff0c;两个井号加…

Git远程仓库操作

文章目录 远程仓库连接Gitee克隆代码 多人协同问题说明 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Git专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年12月1日13点10分 远程仓库 Git 是分布式版本控制系统&#xff0c;同一个 Git …

virtualbox给Ubuntu22创建共享文件夹

1.在windows上的操作&#xff0c;创建共享文件夹Share 2.Ubuntu22上的操作&#xff0c;创建共享文件夹LinuxShare 3.在virtualbox虚拟机设置里&#xff0c;设置共享文件夹 共享文件夹路径&#xff1a;选择Windows系统中你需要共享的文件夹 共享文件夹名称&#xff1a;挂载至wi…

人工智能-深度学习-BP算法

BP算法的核心思想是通过计算损失函数对网络参数的梯度&#xff0c;然后使用梯度下降法来更新网络参数&#xff0c;从而最小化损失函数。 误差反向传播算法(BP)的基本步骤: 前向传播&#xff1a;正向计算得到预测值。 计算损失&#xff1a;通过损失函数计算预测值和真实值的差…

(免费送源码)计算机毕业设计原创定制:Apache+JSP+Ajax+Springboot+MySQL Springboot自习室在线预约系统

摘 要 远程预约是一种全新的网络租用方式&#xff0c;它通过互联网突破了时间和空间限制&#xff0c;实现了便捷快速的预约与管理功能。在对数据信息有效组织并整合了一定使用功能后&#xff0c;远程预约系统可以方便地实现预约与取消&#xff0c;以及信息查询等功能。经过本人…

【51单片机】程序实验910.直流电机-步进电机

主要参考学习资料&#xff1a;B站【普中官方】51单片机手把手教学视频 前置知识&#xff1a;C语言 单片机套装&#xff1a;普中STC51单片机开发板A4标准版套餐7 码字不易&#xff0c;求点赞收藏加关注(•ω•̥) 有问题欢迎评论区讨论~ 目录 程序实验9&10.直流电机-步进电机…

windows 应用 UI 自动化实战

UI 自动化技术架构选型 UI 自动化是软件测试过程中的重要一环&#xff0c;网络上也有很多 UI 自动化相关的知识或资料&#xff0c;具体到 windows 端的 UI 自动化&#xff0c;我们需要从以下几个方面考虑&#xff1a; 开发语言 毋庸置疑&#xff0c;在 UI 自动化测试领域&am…

我不是挂王-用python实现燕双鹰小游戏

一.准备工作 1.前言提要 作为程序员在浩瀚的数字宇宙中&#xff0c;常常感觉现实世界是一台精密运作的虚拟机&#xff0c;其底层的物理逻辑如同铁律般难以撼动。然而我们拥有在虚拟世界中自由驰骋、创造无限可能的独特力量。突发奇我想用Python写出燕双鹰的小游戏,这样想想就很…

会议直击|美格智能亮相2024紫光展锐全球合作伙伴大会,融合5G+AI共拓全球市场

11月26日&#xff0c;2024紫光展锐全球合作伙伴大会在上海举办&#xff0c;作为紫光展锐年度盛会&#xff0c;吸引来自全球的众多合作伙伴和行业专家、学者共同参与。美格智能与紫光展锐竭诚合作多年&#xff0c;共同面向5G、AI和卫星通信为代表的前沿科技&#xff0c;聚焦技术…

3. STM32_串口

数据通信的基础概念 什么是串行/并行通信&#xff1a; 串行通信就是数据逐位按顺序依次传输 并行通信就是数据各位通过多条线同时传输。 什么是单工/半双工/全双工通信&#xff1a; 单工通信&#xff1a;数据只能沿一个方向传输 半双工通信&#xff1a;数据可以沿两个方向…

RPC与HTTP调用模式的架构差异

RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;和 HTTP 调用是两种常见的通信模式&#xff0c;它们在架构上有以下一些主要差异&#xff1a; 协议层面 RPC&#xff1a;通常使用自定义的二进制协议&#xff0c;对数据进行高效的序列化和反序列化&am…

Microsoft Excel如何插入多行

1.打开要编辑的excel表&#xff0c;在指定位置&#xff0c;鼠标右键点击“插入”一行 2.按住shift键&#xff0c;鼠标的光标箭头会变化成如下图所示 3.一直按住shift键和鼠标左键&#xff0c;往下拖动&#xff0c;直至到插入足够的行

【python】图像、音频、视频等文件数据采集

【python】图像、音频、视频等文件数据采集 先安装所需要的工具一、Tesseract-OCRTesseract-OCR环境变量设置验证是否配置成功示例语言包下载失败 二、ffmpeg验证是否安装成功示例 先安装所需要的工具 一、Tesseract-OCR Tesseract是一个 由HP实验室开发 由Google维护的开源的…

虚拟机docker记录

最近看了一个up的这个视频&#xff0c;感觉docker真的挺不错的&#xff0c;遂也想来搞一下&#xff1a; https://www.bilibili.com/video/BV1QC4y1A7Xi/?spm_id_from333.337.search-card.all.click&vd_sourcef5fd730321bc0e9ca497d98869046942 这里我用的是vmware安装ubu…

C++STL之vector(超详细)

CSTL之vector 1.vector基本介绍2.vector重要接口2.1.构造函数2.2.迭代器2.3.空间2.3.1.resize2.3.2.capacity 2.4.增删查找 3.迭代器失效4.迭代器分类 &#x1f31f;&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f;&#x1f31f; &#x1f680;&#x1f68…

深度学习实验十三 卷积神经网络(4)——使用预训练resnet18实现CIFAR-10分类

目录 一、数据加载 二、数据集类构建 三、模型构建 四、模型训练 五、模型评价及预测 附完整可运行代码&#xff1a; 实验大体步骤&#xff1a; 注&#xff1a; 在自己电脑的CPU跑代码 连接远程服务器跑代码√ 本次实验由于数据量巨大&#xff0c;我的笔记本上还没有…

【Maven Helper】分析依赖冲突案例

目录 Maven Helper实际案例java文件pom.xml文件运行抛出异常分析 参考资料 《咏鹅》骆宾王 鹅&#xff0c;鹅&#xff0c;鹅&#xff0c;曲项向天歌。 白毛浮绿水&#xff0c;红掌拨清波。 骆宾王是在自己7岁的时候就写下了这首杂言 Maven Helper A must have plugin for wor…

Android 桌面窗口新功能推进,聊一聊 Android 桌面化的未来

Android 桌面化支持可以说是 Android 15 里被多次提及的 new features&#xff0c;例如在 Android 15 QPR1 Beta 2 里就提到为 Pixel 平板引入了桌面窗口支持&#xff0c;桌面窗口允许用户在自由窗口同时运行多个应用&#xff0c;同时可以像在传统 PC 平台上一样调整这些窗口的…