vikio88 / mashtru
一个框架无关的php库,用于在共享主机或非共享主机上管理计划任务
v1.0.1
2017-03-04 17:24 UTC
Requires
- monolog/monolog: ^1.22
- morris/lessql: ~0.3
- nesbot/carbon: ^1.22
Requires (Dev)
- phpunit/phpunit: ^5.7
This package is not auto-updated.
Last update: 2024-09-15 02:19:24 UTC
README
mashtru将管理共享主机上的计划任务(以及实际上任何地方)
问题
共享php主机通常只提供有限数量的计划任务脚本(从1到5),如果你需要你的应用程序执行一些异步的cron任务,并且你不想忘记单一职责原则,那么你只需要mashtru。
钩子脚本
设置唯一的计划任务为hook.php
脚本,它可能看起来像这样
<?php require '../vendor/autoload.php'; use Mashtru\JobManager; use Mashtru\Libs\Helpers\DBConfig; use Mashtru\Libs\Helpers\RunnerConfig; $jobs = new JobManager( new DBConfig( 'localhost', 'mashtru', 'root', 'root' ), new RunnerConfig( [ 'App\Scripts\\' ] ) ); $jobs->fire();
并且想象一下,有一个任务在DosomeStuff.php
文件中定义
<?php namespace App\Scripts; use Mashtru\Libs\Interfaces\Job; class DoSomeStuff implements Job { public function fire(array $parameters = []) { echo "I do some cron stuff!"; //SOME STUFF //RETURN AN INT return 0; } public function getName() { return 'DoSomeStuff'; } }
这个类的fire方法将会被调用多少次,取决于你在Job配置中定义的次数。
配置任务
mashtru使用一个名为mashtru_jobs
的单个表,那里的结构如下
CREATE TABLE mashtru_jobs( id SMALLINT NOT NULL AUTO_INCREMENT, name VARCHAR(255), class_name VARCHAR(255) DEFAULT NULL, args TEXT DEFAULT NULL, delta_minutes INT DEFAULT NULL, active BOOL DEFAULT 1, fire_time TIMESTAMP NULL DEFAULT NULL, updated_at TIMESTAMP NOT NULL DEFAULT NOW() ON UPDATE NOW(), created_at TIMESTAMP NOT NULL, PRIMARY KEY(id), INDEX `name` (`name`) );
类JobManager
提供了从表中安装/卸载/添加/删除/更新/获取任务的实用工具。这些操作的实现委托给库用户。我将在受保护的rest-api中使用它,即我可以通过rest-api来管理任务。
合作
这是我为自己编写的愚蠢库,任何帮助或反馈都将受到欢迎。
待办事项
- 使表名可配置
- 将
delta_minutes
替换为cronjob-like配置