php 如何实现用户自定义的定时任务

现在遇到一个问题是:

 用户A登陆后台之后 设置一个定时任务 每天早上 9:00 执行,
 用户B登陆后台之后 设置一个定时任务 每天夜里 8:00 执行,
 用户C
 ...
 
 这种功能如何设计
 用户是web系统的用户,不是操作系统的用户。

 

用户设置定时任务后,后台逻辑将定时任务下发给crontab,使用crontab来定时执行用户的任务。

https://github.com/osgochina/swoole-crontab

基于swoole的定时器程序,支持秒级处理.
异步多进程处理。
完全兼容crontab语法,且支持秒的配置
请使用swoole扩展1.7.9-stable及以上版本.Swoole

一般的做法是,用户设置定时任务后,后台将数据记入存储(这样用户取消只要用字段标记失效就可以了),用crontab或者守护进程做扫描,把满足条件的任务激活执行。

我看到你打了php标签,php可以使用pcntl扩展实现纯php定时器任务,目前php只支持以秒为单位的触发,不支持更小时间单位,不过对位定时任务而言基本足够~

Windows下计划任务,Linux下crontab,php去调用

每一个web用户创建的所有定时任务的总和就是你的系统的所有定时任务,只不过定时的时间点不同而已,所以,你的核心点还是在创建定时任务上。

你可以先建立一个定时任务表,记录每一个定时任务的时间点,要执行的动作,对应的用户id等信息,再创建一个定时任务去不断的刷这个表,如果发现某条记录到了定时点,就执行对应的动作。

具体的一些定时任务的思路可以先看下这篇文章:http://segmentfault.com/a/1190000002955509

可以将要执行的任务放入数据库然后在写一个后台程序去解析数据库的内容或者利用系统的计划任务来启动解释程序去执行
discuz也有计划任务,有兴趣可以去了解一下。 不过discuz 的是要用户触发入口才会执行的吧。

  • webpack打包文件资源问题
  • 请问segmentfault在使用closure-library吗?
  • 使用正则表达式写出一个网址的url
  • 关于“加载更多”的问题
  • 如何在字符串查询包含数组某个值
  • 求一个gulp解析xml的插件和用法
  • redis下如何设置set之类的过期时间
  • 请问,ajaxfileupload.js 在IE上传文件上传文件成功后执行error
  • 全景展示有人做过吗?给点思路。。。
  • child_process 执行系统命令与其调用 cmd 执行命令的不同
  • 数据库中相同局域网IP记录的筛选方案有哪些?