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

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

http://www.kler.cn/a/417693.html

相关文章:

  • python通过正则匹配SQL
  • 《Swift 字面量》
  • 【C++】模板与泛型编程(一):定义模板,控制实例化、效率与灵活性
  • 【读书笔记】《论语别裁》爱与罪
  • AtCoder Beginner Contest 385(A~F)题解
  • nmap扫描优化
  • 【拥抱AI】RAG如何提高向量化的质量
  • 排序学习整理(2)
  • HDFS知识总结
  • 网络安全:攻防技术-Google Hacking的实现及应用
  • Android复习简答题
  • 【Nativeshell】flutter的pc跨平台框架学习记录<二> 窗口间通信
  • 条件数:概念、矩阵中的应用及实际工业场景应用
  • 鬼谷子的捭阖之道
  • BBC将 IT 系统迁移至基于AWS的RISE with SAP
  • 【PX4_Autopolite飞控源码】中飞控板初始化过程中的引脚IO控制(拉低/拉高)
  • YOLO系列论文综述(从YOLOv1到YOLOv11)【第15篇(完结):讨论和未来展望】
  • 数据结构 (14)数组的定义与运算
  • 【网络安全】记一次杀猪盘渗透实战
  • 36 基于单片机的电磁炉系统设计
  • Web3的核心技术解析:从区块链到智能合约的全景探索
  • HarmonyOS 应用跨团队 Debug 协作
  • 芯片测试-射频中的单位
  • Java面向对象. 多态
  • 二十一、QT C++
  • 家庭打印机如何连接电脑