运行 来自 MySQL 数据库的计划任务

Running Scheduled Tasks from MySQL Database

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

数据库Table结构

 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,我想知道什么是最好的方法和/或最好的语言来编写一个连续的运行ning 服务/守护进程/脚本来查询数据库并检查条目在 table 中查看是否需要根据当前星期几和时间对这些条目中的任何一项进行操作。

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

注意:我想远离 cron 作业。如果您的建议涉及 cron 作业,请不要费心回复。它们不可扩展,也不可跨服务器网络轻松管理。

更新 - 示例

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

谢谢

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

的 node-cron

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