2017 © Pedro Peláez
 

library crontab

php crontab base on pcntl and libev

image

jenner/crontab

php crontab base on pcntl and libev

  • Friday, January 6, 2017
  • by huyanping
  • Repository
  • 32 Watchers
  • 267 Stars
  • 573 Installations
  • PHP
  • 1 Dependents
  • 0 Suggesters
  • 89 Forks
  • 3 Open issues
  • 6 Versions
  • 7 % Grown

The README.md

php_crontab

Latest Stable Version Total Downloads Latest Unstable Version License License, (*1)

php crontab base on pcntl and react/event-loop, (*2)

中文说明, (*3)

Why use php_crontab?

When we have a handful of crontab tasks, crontab service is enough for us to manage them. If we have many crontab tasks, there will be some problems like: + The crontab tasks are managed in a text file. If there are no comment, it will be hard for fresh man to understand what they are. + If the crontab tasks are distributed in different servers, it will be hard to manage them. + If you want to collect the crontab tasks' logs, it will be not easy. + Tasks of different users must written in different files. Based on the above reasons, we need a crontab manager which can manage crontab tasks together and configure the tasks., (*4)

How to use php_crontab?

First composer require jenner/crontab.
There are two ways to use php_crontab to manage your crontab tasks. You can just write a php script and add it to the crontab config file with the command crontab -e. The php script should run every minute. For example tests/simple.php
Or you can write a php daemon script which will run as a service and will not exit until someone kill it. It will check the tasks every minute. For example tests/daemon.php, (*5)

Import

composer require jenner/crontab

Properties

  • The crontab tasks can be stored in any way you what. For example, mysql, reids. What's more? You can develop a web application to manage them.
  • The tasks of different users can be managed together.
  • Multi-Process, every task is a process.
  • You can set the user and group of a crontab task
  • STDOUT can be redirected
  • Based on react/event-loop, it can run as a daemon.
  • A HTTP server which you can manage the crontab tasks through it.
  • Dynamic task loader, you can register a task loader by Daemon::registerTaskLoader, which will execute every 60 seconds and update the crontab tasks.

HTTP interfaces

HTTP METHOD: GET
+ add add new task to crontab server + get_by_name get task by name + remove_by_name remove task by name + clear clear all task + get get all tasks + start start crontab loop + stop stop crontab loop, (*6)

Examples:, (*7)

http://host:port/add?name=name&cmd=cmd&time=time&out=out&user=user&group=group&comment=comment
http://host:port/get_by_name?name=name
http://host:port/remove_by_name?name=name
http://host:port/clear
http://host:port/get
http://host:port/start
http://host:port/stop

TODO

  • add log handler interface.
  • add http log handler, socket log handler, file handler and so on.
  • separate stdout and stderr. use different handlers

run based on crontab service, (*8)

* * * * * php demo.php

```php <?php $missions = [ [ 'name' => 'ls', 'cmd' => "ls -al", 'out' => '/tmp/php_crontab.log', 'err' => '/tmp/php_crontab.log', 'time' => '* * * * ', 'user' => 'www', 'group' => 'www' ], [ 'name' => 'ls', 'cmd' => "ls -al", 'out' => '/tmp/php_crontab.log', 'err' => '/tmp/php_crontab.log', 'time' => ' * * * *', 'user' => 'www', 'group' => 'www' ], ];, (*9)

$tasks = array(); foreach($missions as $mission){ $tasks[] = new \Jenner\Crontab\Mission($mission['name'], $mission['cmd'], $mission['time'], $mission['out']); }, (*10)

$crontab_server = new \Jenner\Crontab\Crontab(null, $tasks); $crontab_server->start(time());, (*11)

**run as a daemon**

it will check the task configs every minute.
```php
$missions = [
    [
        'name' => 'ls',
        'cmd' => "ls -al",
        'out' => '/tmp/php_crontab.log',
        'err' => '/tmp/php_crontab.log',
        'time' => '* * * * *',
        'user' => 'www',
        'group' => 'www'
    ],
    [
        'name' => 'ls',
        'cmd' => "ls -al",
        'out' => '/tmp/php_crontab.log',
        'err' => '/tmp/php_crontab.log',
        'time' => '* * * * *',
        'user' => 'www',
        'group' => 'www'
    ],
];

$daemon = new \Jenner\Crontab\Daemon($missions);
$daemon->start();

Or use the task loader, (*12)

function task_loader() {
    $missions = [
        [
            'name' => 'ls',
            'cmd' => "ls -al",
            'out' => '/tmp/php_crontab.log',
            'time' => '* * * * *',
            'user' => 'www',
            'group' => 'www'
        ],
        [
            'name' => 'ls',
            'cmd' => "ls -al",
            'out' => '/tmp/php_crontab.log',
            'time' => '* * * * *',
            'user' => 'www',
            'group' => 'www'
        ],
    ];

    return $missions;
}

$daemon = new \Jenner\Crontab\Daemon();
$daemon->registerTaskLoader("task_loader");
$daemon->start();

run as a daemon and start the http server, (*13)

$missions = [
    [
        'name' => 'ls',
        'cmd' => "ls -al",
        'out' => '/tmp/php_crontab.log',
        'err' => '/tmp/php_crontab.log',
        'time' => '* * * * *',
        'user' => 'www',
        'group' => 'www'
    ],
    [
        'name' => 'ls',
        'cmd' => "ls -al",
        'out' => '/tmp/php_crontab.log',
        'err' => '/tmp/php_crontab.log',
        'time' => '* * * * *',
        'user' => 'www',
        'group' => 'www'
    ],
];

$http_daemon = new \Jenner\Crontab\HttpDaemon($missions, "php_crontab.log");
$http_daemon->start($port = 6364);

Then you can manage the crontab task by curl like:, (*14)

curl http://127.0.0.1:6364/get_by_name?name=ls
curl http://127.0.0.1:6364/remove_by_name?name=hostname
curl http://127.0.0.1:6364/get

run the script, (*15)

[root@jenner php_crontab]# ./bin/php_crontab 
php_crontab help:
-c  --config    crontab tasks config file
-p  --port      http server port
-f  --pid-file  daemon pid file
-l  --log       crontab log file
[root@jenner php_crontab]#nohup ./bin/php_crontab -c xxoo.php -p 8080 -f /var/php_crontab.pid -l /var/logs/php_crontab.log >/dev/null & 

blog:www.huyanping.cn, (*16)

The Versions

06/01 2017

dev-master

9999999-dev

php crontab base on pcntl and libev

  Sources   Download

MIT

The Requires

 

The Development Requires

crontab crontab manager php crontab

23/10 2015

v1.5.1

1.5.1.0

php crontab base on pcntl and libev

  Sources   Download

MIT

The Requires

 

The Development Requires

crontab crontab manager php crontab

22/10 2015

v1.5.0

1.5.0.0

php crontab base on pcntl and libev

  Sources   Download

MIT

The Requires

 

crontab crontab manager php crontab

21/08 2015

v1.3.0

1.3.0.0

php crontab

  Sources   Download

MIT

The Requires

 

daemon

24/01 2015

v1.2.0

1.2.0.0

php crontab

  Sources   Download

MIT

The Requires

 

daemon

10/11 2014

v1.0.0

1.0.0.0

php crontab

  Sources   Download

MIT

The Requires

 

daemon