vikio88/mashtru

一个框架无关的php库,用于在共享主机或非共享主机上管理计划任务

v1.0.1 2017-03-04 17:24 UTC

This package is not auto-updated.

Last update: 2024-09-15 02:19:24 UTC


README

Build Status

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配置