php gearman manager

inhere 35e2480981 update, add log cache in process 2 years ago
examples 9e7238d567 up 2 years ago
src 35e2480981 update, add log cache in process 2 years ago
tests dbab269262 complete monitor tools 2 years ago
web 8864a783ce some update 2 years ago
.editorconfig 6d89730924 update, comlete monitor web panel tool, update readme 2 years ago
.gitignore fea4cd77ba add stat data manager runtime info 2 years ago 9a82a3f91f update readme 2 years ago c9778a5d77 up 2 years ago
composer.json 6d89730924 update, comlete monitor web panel tool, update readme 2 years ago 645213fdfb 追加一条job统计日志,方便分析。一些调整更新 2 years ago

gearman manager

a php gearman workers manager.


Can start and manage multiple gearman worker, you can set the maximum execution time of each worker and the maximum number of job execution, after reaching the set value. Worker will automatically restart the process, prevent the dead

Learning reference the project brianlmoon/GearmanManager, Thank you very much for this project.

add some feature:

  • Code is easier to read and understand
  • Can support start reload restart stop status command
  • More useful feature

only support linux system, and require enable pcntl posix

basic commands

  • start
// start
php bin/manager.php 
// run as daemon
php bin/manager.php --daemon 
  • stop
php bin/manager.php stop
  • restart
php bin/manager.php restart
  • more
// see help info
php bin/manager.php --help

// print manager config info
php bin/manager.php -D

// jobs status
php bin/manager.php status
php bin/manager.php status --cmd status

// workers status
php bin/manager.php status --cmd workers

commands and options

use php examples/gwm.php -h, you can see all commands and options.

root@php5-dev:/var/www/phplang/library/gearman-manager# php examples/gwm.php -h
Gearman worker manager(gwm) script tool. Version 0.1.0

  php examples/gwm.php {COMMAND} -c CONFIG [-v LEVEL] [-l LOG_FILE] [-d] [-w] [-p PID_FILE]
  php examples/gwm.php -h
  php examples/gwm.php -D

  start             Start gearman worker manager(default)
  stop              Stop running's gearman worker manager
  restart           Restart running's gearman worker manager
  reload            Reload all running workers of the manager
  status            Get gearman worker manager runtime status

    -w,--watch         Automatically watch and reload when 'loader_file' has been modify
    -d,--daemon        Daemon, detach and run in the background
       --jobs          Only register the assigned jobs, multi job name separated by commas(',')
       --no-test       Not add test handler, when job name prefix is 'test'.(eg: test_job)

    --cmd COMMAND      Send command when connect to the job server. allow:status,workers.(default:status)
    --watch-status     Watch status command, will auto refresh status.

  -c CONFIG          Load a custom worker manager configuration file
  -s HOST[:PORT]     Connect to server HOST and optional PORT, multi server separated by commas(',')

  -n NUMBER          Start NUMBER workers that do all jobs

  -u USERNAME        Run workers as USERNAME
  -g GROUP_NAME      Run workers as user's GROUP NAME

  -l LOG_FILE        Log output to LOG_FILE or use keyword 'syslog' for syslog support
  -p PID_FILE        File to write master process ID out to

  -r NUMBER          Maximum run job iterations per worker
  -x SECONDS         Maximum seconds for a worker to live
  -t SECONDS         Number of seconds gearmand server should wait for a worker to complete work before timing out

  -v [LEVEL]         Increase verbosity level by one. (eg: -v vv | -v vvv)

  -h,--help          Shows this help information
  -V,--version       Display the version of the manager
  -D,--dump [all]    Parse the command line and config file then dump it to the screen and exit.

add handler

you can add job handler use: function Closure Class/Object

class or object must be is a class implement the __invoke() or a class implement the interface inhere\gearman\jobs\JobInterface

  • file: job_handlers.php

 * a class implement the '__invoke()'
class TestJob
    public function __invoke($workload, \GearmanJob $job)
        echo "from TestJob, call by __invoke";

// add job handlers

$mgr->addHandler('reverse_string', function ($string, \GearmanJob $job)
    $result = strrev($string);

    echo "Result: $result\n";

    return $result;

$mgr->addHandler('test_job', TestJob::class);

// use a class implement the interface `inhere\gearman\jobs\JobInterface`, add some option for the job.
$mgr->addHandler('echo_job', \inhere\gearman\examples\jobs\EchoJob::class, [
    'worker_num' => 2,
    'focus_on' => 1,
  • extends inhere\gearman\Job

 * Class EchoJob
 * @package inhere\gearman\jobs
class EchoJob extends Job
     * {@inheritDoc}
    protected function doRun($workload, \GearmanJob $job)
        echo "receive: $workload";

start manager

use php gwm.php -h see more help information

run: php gwm.php

monitor web panel

you can see the server, jobs, workers info by built-in tool.


// OR
php -S -t web

open the url

  • server,jobs info

  • see log