plinker/tasks

v1.0.14 2018-05-30 05:52 UTC

README

任务组件允许您编写由守护进程完成的代码任务,这可以使您创建一个用于控制服务器集群任务的单一接口。

安装

使用以下命令通过composer安装此包

$ composer require plinker/tasks

CRON守护进程

您应该创建一个将被cron运行文件

cron.php

<?php
require 'vendor/autoload.php';

if (php_sapi_name() != 'cli') {
    header('HTTP/1.0 403 Forbidden');
    exit('CLI script');
}

$task = new Plinker\Tasks\Runner([
    'database' => [
        'dsn'      => 'sqlite:./.plinker/database.db',
        'host'     => '',
        'name'     => '',
        'username' => '',
        'password' => '',
        'freeze'   => false,
        'debug'    => false
    ],
    'debug'       => true,
    'log'         => true,
    'sleep_time'  => 2,
    'tmp_path'    => './.plinker',
    'auto_update' => 86400
]);

$task->daemon('Queue');

然后添加一个cron任务

  • @reboot while sleep 1; do cd /var/www/html/examples/tasks && /usr/bin/php run.php ; done

客户端

创建客户端实例的步骤如下

<?php
require 'vendor/autoload.php';

/**
 * Initialize plinker client.
 *
 * @param string $server - URL to server listener.
 * @param string $config - server secret, and/or a additional component data
 */
$client = new \Plinker\Core\Client(
    'http://example.com/server.php',
    [
        'secret' => 'a secret password',
        // database connection
        'database' => [
            'dsn'      => 'sqlite:./.plinker/database.db',
            'host'     => '',
            'name'     => '',
            'username' => '',
            'password' => '',
            'freeze'   => false,
            'debug'    => false,
        ],
        // displays output to task runner console
        'debug' => true,
    
        // daemon sleep time
        'sleep_time' => 1,
        'tmp_path'   => './.plinker'
    ]
);

// or using global function
$client = plinker_client('http://example.com/server.php', 'a secret password', [
    // database connection
    'database' => [
        'dsn'      => 'sqlite:./.plinker/database.db',
        'host'     => '',
        'name'     => '',
        'username' => '',
        'password' => '',
        'freeze'   => false,
        'debug'    => false,
    ],
    // displays output to task runner console
    'debug' => true,

    // daemon sleep time
    'sleep_time' => 1,
    'tmp_path'   => './.plinker'
]);

方法

设置完成后,您可以通过其命名空间调用类及其方法。

创建

创建新的任务,同名任务将被覆盖。

调用

$client->tasks->create(
    'Hello World',
    '<?php echo "Hello World";',
    'php',
    'My Hello World task',
    []
)

响应

Array
(
    [id] => 1
    [name] => Hello World
    [source] =>  cda22aa1e43992c1103a9f8a386b5dcb
    [type] => php
    [description] => My Hello World task
    [params] => 
    [updated] => 2018-01-01 00:00:00
    [created] => 2018-01-01 00:00:00
)

更新

更新任务。

调用

$client->tasks->update(
    1
    'Hello World',
    '<?php echo "Hello World - Updated";',
    'php',
    'My Hello World task',
    []
)

响应

Array
(
    [id] => 1
    [name] => Hello World - Updated
    [source] =>  cda22aa1e43992c1103a9f8a386b5dcb
    [type] => php
    [description] => My Hello World task
    [params] => 
    [updated] => 2018-01-01 00:00:00
    [created] => 2018-01-01 00:00:00
)

获取

获取任务。

调用

$client->tasks->get('Hello World');

响应(RedBean对象)

RedBeanPHP\OODBBean Object
(
    [properties:protected] => Array
        (
            [id] => 1
            [name] => Hello World
            [source] =>  cda22aa1e43992c1103a9f8a386b5dcb
            [type] => php
            [description] => My Hello World task
            [params] => 
            [updated] => 2018-01-01 00:00:00
            [created] => 2018-01-01 00:00:00
        )

    [__info:protected] => Array
        (
            [type] => tasksource
            [sys.id] => id
            [sys.orig] => Array
                (
                    [id] => 1
                    [name] => Hello World
                    [source] =>  cda22aa1e43992c1103a9f8a386b5dcb
                    [type] => php
                    [description] => My Hello World task
                    [params] => 
                    [updated] => 2018-01-01 00:00:00
                    [created] => 2018-01-01 00:00:00
                )

            [tainted] => 
            [changed] => 
            [changelist] => Array
                (
                )

            [model] => 
        )

    [beanHelper:protected] => RedBeanPHP\BeanHelper\SimpleFacadeBeanHelper Object
        (
        )

    [fetchType:protected] => 
    [withSql:protected] => 
    [withParams:protected] => Array
        (
        )

    [aliasName:protected] => 
    [via:protected] => 
    [noLoad:protected] => 
    [all:protected] => 
)

通过ID获取

通过ID获取任务。

调用

$client->tasks->getById(1);

响应(RedBean对象)

RedBeanPHP\OODBBean Object
(
    [properties:protected] => Array
        (
            [id] => 1
            [name] => Hello World
            [source] =>  cda22aa1e43992c1103a9f8a386b5dcb
            [type] => php
            [description] => My Hello World task
            [params] => 
            [updated] => 2018-01-01 00:00:00
            [created] => 2018-01-01 00:00:00
        )

    [__info:protected] => Array
        (
            [type] => tasksource
            [sys.id] => id
            [sys.orig] => Array
                (
                    [id] => 1
                    [name] => Hello World
                    [source] =>  cda22aa1e43992c1103a9f8a386b5dcb
                    [type] => php
                    [description] => My Hello World task
                    [params] => 
                    [updated] => 2018-01-01 00:00:00
                    [created] => 2018-01-01 00:00:00
                )

            [tainted] => 
            [changed] => 
            [changelist] => Array
                (
                )

            [model] => 
        )

    [beanHelper:protected] => RedBeanPHP\BeanHelper\SimpleFacadeBeanHelper Object
        (
        )

    [fetchType:protected] => 
    [withSql:protected] => 
    [withParams:protected] => Array
        (
        )

    [aliasName:protected] => 
    [via:protected] => 
    [noLoad:protected] => 
    [all:protected] => 
)

获取任务源

获取所有任务。

调用

$client->tasks->getTaskSources();

响应(RedBean对象)

Array
(
    [1] => RedBeanPHP\OODBBean Object
        (
            [properties:protected] => Array
                (
                    [id] => 1
                    [name] => Hello World
                    [source] =>  cda22aa1e43992c1103a9f8a386b5dcb
                    [type] => php
                    [description] => My Hello World task
                    [params] => 
                    [updated] => 2018-01-01 00:00:00
                    [created] => 2018-01-01 00:00:00
                )
        
            [__info:protected] => Array
                (
                    [type] => tasksource
                    [sys.id] => id
                    [sys.orig] => Array
                        (
                            [id] => 1
                            [name] => Hello World
                            [source] =>  cda22aa1e43992c1103a9f8a386b5dcb
                            [type] => php
                            [description] => My Hello World task
                            [params] => 
                            [updated] => 2018-01-01 00:00:00
                            [created] => 2018-01-01 00:00:00
                        )
        
                    [tainted] => 
                    [changed] => 
                    [changelist] => Array
                        (
                        )
        
                    [model] => 
                )
        
            [beanHelper:protected] => RedBeanPHP\BeanHelper\SimpleFacadeBeanHelper Object
                (
                )
        
            [fetchType:protected] => 
            [withSql:protected] => 
            [withParams:protected] => Array
                (
                )
        
            [aliasName:protected] => 
            [via:protected] => 
            [noLoad:protected] => 
            [all:protected] => 
        )
    )
)

状态

获取任务的状态。

调用

$client->tasks->status('Hello World');

响应

running

运行次数

获取特定任务的运行次数。

调用

$client->tasks->runCount('Hello World');

响应

100

删除

通过名称删除任务。

调用

$client->tasks->remove('Hello World');

响应

true

通过ID删除

通过ID删除任务。

调用

$client->tasks->removeById(1);

响应

true

获取任务日志

任务日志是在任务运行时创建的条目。使用此方法获取数据。

调用

$result = $client->tasks->getTasksLog();

响应

Array
(
    [1] => RedBeanPHP\OODBBean Object
        (
            [properties:protected] => Array
                (
                    [id] => 1
                    [name] => Hello World
                    [params] => []
                    [repeats] => 1
                    [completed] => 0
                    [sleep] => 1
                    [tasksource_id] => 1
                    [run_last] => 2018-01-01 00:00:00
                    [run_next] => 2018-01-01 00:00:00
                    [run_count] => 6
                    [result] => 
                    [tasksource] => 
                )

            [__info:protected] => Array
                (
                    [type] => tasks
                    [sys.id] => id
                    [sys.orig] => Array
                        (
                            [id] => 1
                            [name] => Hello World
                            [params] => []
                            [repeats] => 1
                            [completed] => 0
                            [sleep] => 1
                            [tasksource_id] => 1
                            [run_last] => 2018-01-01 00:00:00
                            [run_next] => 2018-01-01 00:00:00
                            [run_count] => 6
                            [result] => 
                            [tasksource] => 
                        )

                    [tainted] => 
                    [changed] => 
                    [changelist] => Array
                        (
                        )

                    [model] => 
                )

            [beanHelper:protected] => RedBeanPHP\BeanHelper\SimpleFacadeBeanHelper Object
                (
                )

            [fetchType:protected] => 
            [withSql:protected] => 
            [withParams:protected] => Array
                (
                )

            [aliasName:protected] => 
            [via:protected] => 
            [noLoad:protected] => 
            [all:protected] => 
        )
    )
)

获取任务日志计数

任务日志是在任务运行时创建的条目。使用此方法获取计数。

调用

$result = $client->tasks->getTasksLogCount();

响应

1

删除任务日志

从任务中删除任务日志。

调用

$result = $client->tasks->removeTasksLog(1);

响应

true

获取任务

任务日志是在任务运行时创建的条目。使用此方法获取数据。

调用

$result = $client->tasks->getTasks();

响应

Array
(
    [1] => RedBeanPHP\OODBBean Object
        (
            [properties:protected] => Array
                (
                    [id] => 1
                    [name] => Hello World
                    [params] => []
                    [repeats] => 1
                    [completed] => 0
                    [sleep] => 1
                    [tasksource_id] => 1
                    [run_last] => 2018-01-01 00:00:00
                    [run_next] => 2018-01-01 00:00:00
                    [run_count] => 6
                    [result] => 
                    [tasksource] => 
                )

            [__info:protected] => Array
                (
                    [type] => tasks
                    [sys.id] => id
                    [sys.orig] => Array
                        (
                            [id] => 1
                            [name] => Hello World
                            [params] => []
                            [repeats] => 1
                            [completed] => 0
                            [sleep] => 1
                            [tasksource_id] => 1
                            [run_last] => 2018-01-01 00:00:00
                            [run_next] => 2018-01-01 00:00:00
                            [run_count] => 6
                            [result] => 
                            [tasksource] => 
                        )

                    [tainted] => 
                    [changed] => 
                    [changelist] => Array
                        (
                        )

                    [model] => 
                )

            [beanHelper:protected] => RedBeanPHP\BeanHelper\SimpleFacadeBeanHelper Object
                (
                )

            [fetchType:protected] => 
            [withSql:protected] => 
            [withParams:protected] => Array
                (
                )

            [aliasName:protected] => 
            [via:protected] => 
            [noLoad:protected] => 
            [all:protected] => 
        )
    )
)

运行

将任务条目放入任务表,以便守护进程运行。

调用

// run once
$client->tasks->run('Hello World', [], 0);

// run every day
$client->tasks->run('Hello World', [], 86400);

响应

Array
(
    [id] => 1
    [name] => Hello World
    [params] => []
    [repeats] => 1
    [completed] => 0
    [sleep] => 86400
    [tasksource_id] => 1
    [run_last] => 2018-01-01 00:00:00
    [run_next] => 2018-01-01 00:00:00
    [run_count] => 10
    [result] => Hello World
)

立即运行

立即运行任务(任务不会放入任务表供守护进程运行),并且作为web服务器用户运行。

调用

$client->tasks->runNow('Hello World');

响应

Hello World

清除

删除所有任务。

调用

$result = $client->tasks->clear();

响应

true

重置

删除数据库。请谨慎使用。

调用

$result = $client->tasks->reset();

响应

true

测试

此组件没有设置测试。

贡献

有关详细信息,请参阅CONTRIBUTING

安全

如果您发现任何与安全相关的问题,请通过https://cherone.co.uk与我联系,而不是使用问题跟踪器。

致谢

链接

想看看使用此组件的示例项目吗?

开发鼓励

如果您使用此项目并从中获利或想表示感谢,请随意捐赠https://www.paypal.me/lcherone,谢谢。

赞助商

让您的公司或姓名在文档中和每个GitHub存储库中列出,有关更多信息,请联系我https://cherone.co.uk

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件

有关其他组件的信息,请参阅组织页面