JTimer

秒级定时任务管理
授权协议 Apache 2.0
开发语言 PHP
所属分类 企业应用、 任务/项目管理
软件类型 开源软件
地区 国产
投 递 者 陆畅
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

 基于thinkphp5_layui秒级定时任务管理

jtimer使用了master-worker进程模型,能够实现无阻塞执行任务。

时间表达使用了cron表达式,可精确到秒级,方便好用(比crontab多一位)

安装与使用

项目要求:


1. php.ini开放exec方法
2. 安装pcntl扩展
3. 安装posix扩展

后台部署

项目后台基于thinkphp5+layui实现,部署方法参考thinkphp5官方文档,此处不再阐述。

数据库文件位于项目根目录 jtimer.sql,请自行导入

默认用户名密码:admin/admin


任务进程管理


所有命令均在项目根目录下执行

启动进程:


 php think jtimer start

停止进程:

php think jtimer stop

查看进程状态:


 php think jtimer status 或 ps aux | grep jtimer

架构介绍

cron表达式
 

* * * * * *
| | | | | |
| | | | | ---- 星期(0-6)  
| | | | ------ 月份(1-12)
| | | -------- 日  (1-31)
| | ---------- 时  (0-23)
| ------------ 分  (0-59)
|------------- 秒  (0-59) 


 

进程模型

简单来说,就是两个worker进程,1个负责数据的读写(读任务,写日志),1个负责任务的执行(创建task进程执行任务)。

两者之间通过tp框架自带的文件缓存作为沟通的桥梁。

Q1: 为什么要用两个worker,而不是一个worker直接读数据库然后执行任务?

为了让任务不阻塞,执行每一个任务时都会创建一个新的task进程去执行,task进程执行完毕会退出。如果在worker进程使用了数据库连接,那么fork出来的task进程会继承worker进程的连接(共用一个数据库连接),在task进程退出后,worker和task共用的连接也将被关闭,导致worker断开数据库连接。

Q2:cron任务定时执行是如何实现的?

先解析任务的cron表达式得到该任务下次要执行的具体时间,然后将该任务置于时间轮片(TimingWheel)中,worker进程每秒查看一次时间轮片,发现有要执行的任务就取出来执行。执行完毕后再重复执行上面的步骤。(关于TimingWheel,请自行百度)

演示

注意


本项目只在测试环境运行过,如果要用于生产环境,请自行进行严格的测试后再投入使用。如有问题,自行负责。

  •   很多时候我们需要按时间间隔执行一个任务,当满足一定条件时停止执行.此插件旨在解决这一经常遇到的问题. jTimer: (function ($) { $.extend({ timer: function (action,context,time) { var _timer; if ($.isFunction(action)

  • 本节内容: jquery插件jTimer,jQuery定时器。 需求: 按时间间隔执行一个任务,当满足一定条件时停止执行。 1,插件用法: 复制代码 代码示例: (function ($) { $.extend({ timer: function (action,context,time) { var _timer; if ($.isFunction(action)) { (function ()

 相关资料
  • 本文向大家介绍php使用Swoole实现毫秒级定时任务的方法,包括了php使用Swoole实现毫秒级定时任务的方法的使用技巧和注意事项,需要的朋友参考一下 项目开发中,如果有定时任务的业务要求,我们会使用linux的crontab来解决,但是它的最小粒度是分钟级别,如果要求粒度是秒级别的,甚至毫秒级别的,crontab就无法满足,值得庆幸的是swoole提供的强大的毫秒定时器。 应用场景举例 我们

  • 本文向大家介绍Laravel定时任务的每秒执行代码,包括了Laravel定时任务的每秒执行代码的使用技巧和注意事项,需要的朋友参考一下 laravel中的任务调度可以不将每条命令都写入crontab,便于管理维护,而且可以基于laravel框架环境运行,而不需写独立的脚本执行,非常方便,但是最小的执行间隔也是一分钟,要想达到每秒执行的效果,就要借助shll脚本了,在shell脚本里循环60次每秒执

  • 在请求返回后继续执行章节中,我们介绍了一种实现的方法,这里我们 介绍一种更优雅更通用的方法:ngx.timer.at()。 ngx.timer.at 会创建一个 Nginx timer。在事件循环中,Nginx 会找出到期的 timer,并在一个独立的协程中执行对应的 Lua 回调函数。 有了这种机制,ngx_lua 的功能得到了非常大的扩展,我们有机会做一些更有想象力的功能出来。比如 批量提交和

  • 在 Blade 2.0.8 版本之后加入了 cron 表达式来完成定时执行任务的需求。 你只需要在处理任务的方法上添加一个 @Schedule 注解,然后编写 cron 表达式即可。 Blade 的任务系统提供你创建、停止、获取任务列表的 API。 创建一个任务 @Bean public class SimpleTask { @Schedule(cron = "* * * * * ?")

  • 定时任务即在指定的时间点对关联资源进行指定动作。 定时任务即在指定的时间点对关联资源进行指定动作。目前仅支持对虚拟机进行定时开关机、重启等操作。 入口:在云管平台单击左上角导航菜单,在弹出的左侧菜单栏中单击 “运维工具/常用工具/定时任务” 菜单项,进入定时任务页面。 新建定时任务 该功能用于创建定时任务。 在定时任务页面,单击列表上方 “新建” 按钮,进入新建定时任务也没。 配置以下参数: 指定

  • 帮助用户快速部署定时任务。 定时任务(CronJob)可以根据设定的策略周期性的运行job任务。CronJob的详细介绍内容,请参考kubernets官方文档-CronJobs 入口:在云管平台单击左上角导航菜单,在弹出的左侧菜单栏中单击 “容器/应用/定时任务” 菜单项,进入定时任务页面。 定时说明 请参考Cron # 定时设置举例 */1 * * * * # 表示每分钟创建一个job任务。

  • 通常来说,执行定时任务会通过 Linux 的 crontab 命令来实现,但现实情况下,并不是所有开发人员都能够拥有生产环境的服务器去设置定时任务的,这里 hyperf/crontab 组件为您提供了一个 秒级 定时任务功能,只需通过简单的定义即可完成一个定时任务的定义。 安装 composer require hyperf/crontab 使用 启动任务调度器进程 在使用定时任务组件之前,需要

  • 说明 在实际项目中,我们经常会有一些任务是需要定时执行的。 虽然有 cron、crontab、systemd 等系统级内置的,定时任务工具存在。 但是他们的一些让人掉头发的配置写法,以及增加运维心智负担,无法适应多实例部署场景等等原因,势必需要在 imi 框架中提供这个功能。 设计 imi 通过增加一个 CronProcess 进程用于定时任务的调度和执行,使用 Redis 作为数据存储。 定时任