从MySQL数据库运行计划任务

时间:2016-03-16 02:57:31

标签: php mysql cakephp cron scheduled-tasks

我有一个使用CakePHP和MySQL数据库构建的应用程序。在没有涉及太多细节的情况下,它是视频监控即服务(VSaaS)应用程序。我已经构建了一部分功能,允许用户安排自动快照。用户可以以五分钟为增量选择小时和分钟,以及快照应重现的一周中的几天。我现在需要做的是构建一个服务或守护进程,它将实际执行获取快照所需的例程,保存它并根据用户选择的存储时间间隔将必要的数据写入数据库。下面描述的数据库表。

数据库表格结构

 CREATE TABLE `snapshots_schedules` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `device_id` int(11) DEFAULT '0',
  `name` varchar(255) DEFAULT NULL,
  `resolution` varchar(16) DEFAULT '320x240',
  `sunday` tinyint(1) DEFAULT '0',
  `monday` tinyint(1) DEFAULT '0',
  `tuesday` tinyint(1) DEFAULT '0',
  `wednesday` tinyint(1) DEFAULT '0',
  `thursday` tinyint(1) DEFAULT '0',
  `friday` tinyint(1) DEFAULT '0',
  `saturday` tinyint(1) DEFAULT '0',
  `time` time DEFAULT '00:00:00',
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
        PRIMARY KEY (`id`)
  ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

现在,我可以编写一个PHP脚本并将其作为守护程序运行,但是,从过去的经验来看,这不是一个安全的,也不是可扩展的解决方案。我已经在解决方案上进行了广泛的搜索:CakeResque,CakePHP SchedulerShell,Beanstalkd,ZeroMQ,RabbitMQ等。不幸的是,这些都不能满足我的需求。这些服务要求我将信息存储在他们的专有系统中,这只会增加混淆应用程序,该应用程序已经有许多组件用于处理实时馈送,处理相机连接和通信等等。

在坚果shell中,我想知道最好的方法是什么和/或最好的语言来编写一个连续运行的服务/守护进程/脚本来查询数据库并检查表中的条目以查看是否需要这些条目根据当天和时间的当天进行操作。

我绝对乐于接受建议,但显然必须有一种方法可以将预定数据存储在可检索的地方,以便用户可以查看已安排的内容并删除他们想要的任何计划。

注意:我想远离cron的工作。如果您的建议涉及到cron工作,请不要打扰回复。它们在服务器网络中无法扩展或易于管理。

更新 - 示例

用户在星期一下午6:00为设备创建计划快照。守护程序或服务将不断检查数据库以查找需要创建的计划快照。例如,守护程序或服务每隔五分钟就会在上述数据库表上运行SELECT查询。如果是星期一下午6:00,则可以执行URL(http://domain.tld/snapshots/create/device_id),该URL将实际执行从设备获取快照,保存快照等任务。

谢谢

1 个答案:

答案 0 :(得分:0)

在做了一些更多的研究之后,这次专门使用Node.js,似乎已经为Node.js编写了一个名为node-cron的插件,它可以让我完全按照我所做的去做。如果需要安排任务的其他人发现此帖并且不想使用cron和PHP,请检查Node.js的node-cron。

https://github.com/ncb000gt/node-cron