前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从Linux Crontab到Workerman Crontab,定时任务革新之路

从Linux Crontab到Workerman Crontab,定时任务革新之路

作者头像
Tinywan
发布2023-11-27 14:44:53
3540
发布2023-11-27 14:44:53
举报
文章被收录于专栏:开源技术小栈开源技术小栈

作业

Job 表示短周期的作业,定时 Job 表示按照预定的时间运行Job,或者按照某一频率周期性的运行 Job。比如:

许多传统企业使用 Linux 自带的 crontab 来做定时任务的方案,该方案非常简单,适合做主机上的运维工作,比如定时清理日志、周期性做健康检查。随着信息化时代的高速发展,业务变得越来越复杂,很多场景都需要定时任务,但是 crontab 方案存在高可用问题,不适合应用在业务应用上。

Linux Crontab 方案面临的问题

什么是 Crontab

Crontab 是 Linux 系统中的一个服务,用于创建、编辑和管理定时任务。通过 crontab 命令,用户可以设置系统在指定时间自动执行某个命令或脚本。

Crontab 命令的语法分为两部分,分别是时间表达式和命令。时间表达式如下:

代码语言:javascript
复制
# ┌───────────── 分钟 (0 - 59)
# │ ┌───────────── 小时 (0 - 23)
# │ │ ┌───────────── 月的某天 (1 - 31)
# │ │ │ ┌───────────── 月份 (1 - 12)
# │ │ │ │ ┌───────────── 周的某天 (0 - 6)(周日到周一;在某些系统上,7 也是星期日)
# │ │ │ │ │                          或者是 sun,mon,tue,web,thu,fri,sat
# │ │ │ │ │
# │ │ │ │ │
# * * * * *

命令常用来执行某个脚本,举个例子:

代码语言:javascript
复制
# 2020年10月24日 @add Tinywan 备份Nginx日志到OSS。每天凌晨2点执行.
0 2 * * *  /home/tinywan/sh/nginx_log_to_oss.sh  1>> /dev/null 2>&1

# 2021年10月26日 @add Tinywan 删除过期下载文件。每天23:10执行.
0 23 * * * /usr/local/php-7.4/bin/php think crontab delete-job-file

Crontab 的工作原理

Crontab 由一个名为"Crond"的守护进程负责调度任务,当 Crond 启动的时候,就会从配置文件(路径在 /var/spool/cron 下)加载所有的定时任务。当执行 crontab 命令的时候,会动态的添加新的定时任务,并加入到配置文件中。Crontab 每次执行任务,都会产生执行记录,目录在 /var/log/cron 下。

Crontab 的痛点问题

使用 crontab 主要有如下痛点:

  • 无高可用: 为了保证业务幂等执行,需要在不同的机器配置不同的 crontab 任务。crontab 只能调度本机器上的定时任务,如果某一个机器挂了,那上面的定时任务也都不会执行了,有稳定性风险。
  • 无自动负载均衡: 不同的脚本放在不同的机器上,需要手动负载均衡,如果脚本比较多,运维代价很高。
  • 无权限隔离: 一般企业生产的机器只有运维才能登陆,但是开发要新增/修改脚本和定时任务,也需要登录到生产的机器上,没法做到权限隔离。

Workerman Crontab 方案的优势

什么是 Workerman Crontab

Workerman Crontab 是一个基于PHP开发的定时任务管理器,它利用了Workerman框架的特性,可以在PHP应用程序中轻松实现定时任务的调度和管理。

很重要的是支持秒级别的定时任务。这意味着开发者可以更加精确地控制任务的执行时间,满足某些需要高精度定时的需求。

时间说明

代码语言:javascript
复制
0   1   2   3   4   5
|   |   |   |   |   |
|   |   |   |   |   +------ day of week (0 - 6) (Sunday=0)
|   |   |   |   +------ month (1 - 12)
|   |   |   +-------- day of month (1 - 31)
|   |   +---------- hour (0 - 23)
|   +------------ min (0 - 59)
+-------------- sec (0-59)[可省略,如果没有0位,则最小时间粒度是分钟]

简单示例

代码语言:javascript
复制
<?php
use Workerman\Worker;
require __DIR__ . '/vendor/autoload.php';

use Workerman\Crontab\Crontab;
$worker = new Worker();

// 设置时区,避免运行结果与预期不一致
date_default_timezone_set('PRC');

$worker->onWorkerStart = function () {
    // 每分钟的第1秒执行.
    new Crontab('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";
    });
};

Worker::runAll();

注意:定时任务不会马上执行,所有定时任务进入下一分钟才会开始计时执行。

Workerman Crontab 优势

  • 秒级: 支持秒级别的定时任务
  • 高性能: Workerman基于事件驱动的架构,可以处理大量的并发连接和任务,提高任务执行的效率
  • 动态管理: 可以动态添加、删除和修改定时任务,提供更灵活的任务管理方式
  • 分布式部署: 支持将定时任务分布在多台服务器上,提高任务执行的可靠性和效率
  • 效率: 开发人员可以更加灵活地管理定时任务,提高任务执行的效率和可靠性。同时,Workerman Crontab还为定时任务的开发和调试提供了便利,可以更方便地监控和管理任务的执行情况。

总结

总之,从传统的Linux Crontab到现代的Workerman Crontab,使用 Workerman Crontab 在很多场景下可以作为 Linux Crontab 替换的解决方案,解决了crontab的一系列痛点问题。

定时任务正在经历一场变革,为开发人员提供了更多的选择和便利。这种变革使得定时任务的管理更加灵活、高效,并提供了更多的功能和特性,满足了不同应用场景的需求。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 作业
  • Linux Crontab 方案面临的问题
    • 什么是 Crontab
      • Crontab 的工作原理
        • Crontab 的痛点问题
        • Workerman Crontab 方案的优势
          • 什么是 Workerman Crontab
            • Workerman Crontab 优势
            • 总结
            相关产品与服务
            负载均衡
            负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档