之前每开发一个计划任务功能均需要在线上操作crontab来新增项,所以想采用PHP来统一管理单个项目中的任务项,
可以通过建立表[id,name,status,func,timer,last_time,created_at] 来统一存放项目中的计划任务脚本,通过简单的配置
能将各计划任务抽象成简单的任务类,然后通过crontab中配置的单个入口对其进行统一访问,从而减少了上线代码对
线上服务器环境进行修改的麻烦.
然后此处有一些坑,因为任务按功能性质划分可能有好几种,比如:
1. 单次执行,立刻结束,同一时刻可运行多个实例
2. 守护进程,同一时刻只能运行一个实例
对 第二种 需要 加锁 机制,还要防止程序因为出现爆错,异常等情况没有解锁,导致不能再次启动此种任务
对于此种任务还需要考虑运行期间如果因其他需求变更,如何快速方便的终止此任务
猜想 通过 任务id 来实现锁机制,每次任务执行时均需要申请锁,每次申请的锁均有固定的使用配额,此种任务
每批次执行完成后均需消耗一次使用配额,当配额为0时则需要向系统重新申请锁.
lock_id: $task_id
lock_{$task_id}_quota: $quota
每次重新申请锁,均需再次读取任务配置表中该任务的配置信息
如果申请失败(-1),则关闭此次执行,等待下次执行. 这样当想中止此种任务时可采取2种方案:
1. 中止本次,只需将其使用配额设为-1
2. 完全禁止,重置本任务的status为禁用,再重置其使用配额为-1
任务结束之后,要释放锁,如果锁释放失败,需要有一个 无效锁检测机制来强制释放
无效锁的判定:
关键是 如何确定 任务实例是否是活着的,锁配额 < 1 能否认定是无效锁.会不会出现任务在重新申请锁的过程中
被 无效锁检测机制给干掉?
干掉之后是否有影响?
--------------
以上是我的假想,求拍砖
相关推荐
win Cron定时任务
gocron - 使用Go语言开发的轻量级定时任务集中调度和管理系统, 用于替代Linux-crontab
c++任务调度,Bosma::Scheduler 支持cron表达式
3.需要传的值,maxHeight="450px"//最大高, @changeCron="changeCron"//方法,:cronValue="cronValue"//cron表达式, :showCronModal="showCronModal"//打开弹框,style="flex: 0.25"//样式 4.// cron子组件传的...
实现PHP Cron,也就是PHP定时任务,通过本地文件记录schedules,然后通过fsockopen实现非阻塞式的后台访问对应的url来实现定时任务,通过sleep实现定时,如果错过任务,则通过用户访问来执行该任务 文件目录 cron ...
CRON定时任务生成工具CRON定时任务生成工具CRON定时任务生成工具CRON定时任务生成工具CRON定时任务生成工具CRON定时任务生成工具CRON定时任务生成工具
linux 计划任务cron--教你怎么定时执行的指令
quartz cron表达式 Bootstrap实现,经测试可用,可以自己集成到项目中,20积分买的
linux实现php定时执行cron任务
windows本地监控任务cron定时任务软件.本地监控软件,可设置定时访问指定网址
gocron - 定时任务系统的配置与运行详解
前端开源库-node-cronnode cron,一个简单的类似cron的node.js任务调度程序
quartz定时任务cron表达式,可以学习下!!!!!!!
UNIX系统管理-第十四章:调度cron任务.doc
定时任务cron表达式生成工具。
在不停服务的情况下,动态修改Spring定时任务的执行周期,即动态修改定时任务的cron参数。
使用Go语言开发的轻量级定时任务集中调度和管理系统 Web界面管理定时任务 crontab时间表达式, 精确到秒 任务执行失败可重试 任务执行超时, 强制结束 任务依赖配置, A任务完成后再执行B任务 账户权限控制 任务类型 ...
克罗尼Crony是一个基于PHP的cron作业框架。 将主任务添加到您的crontab中, Crony将负责所有必要的工作,以确保您的脱机作业在需要时按您希望的方式运行。安装安装 。 将Jobby添加到composer.json 。 "pcrumm/crony...
Cronner, 帮助维护cron任务的简单工具 Cronner 描述使用情况注释作者许可协议描述帮助维护cron任务的简单工具。它需要 PHP PHP = = 和英镑框架> = 2.4.0 。用法使用它非常简单,因为配置仅在方法注释中。 带有任务的...