basarevych/task-daemon

此软件包已被废弃且不再维护。未建议替代软件包。

简单的PHP守护进程库

v0.2.6 2015-04-19 02:15 UTC

This package is not auto-updated.

Last update: 2021-10-19 18:29:16 UTC


README

简单的PHP fork()ing守护进程,在后台运行任务。它使用Gearman作为内部工具,但对用户不可见。

安装

此守护进程需要一个正在运行的Gearman服务器和以下PHP扩展

  • pcntl
  • posix
  • openssl
  • gearman

将以下内容添加到您的composer.json文件的require部分

    "basarevych/task-daemon": "0.2.*"

示例

请查看示例目录。

  • ReverseWordTask.php - 我们的示例任务
  • InfiniteTask.php - 另一个示例(无限运行)
  • 其余的是我们的示例程序
Initialize:
> git clone https://github.com/basarevych/task-daemon
> cd task-daemon
> ./composer.phar install
> cd Example

Start or restart the daemon:
> php 1.start-the-daemon.php

Print 'foobar' in reverse:
> php 2.reverse-word-task.php foobar

Launch our long running task:
> php 3.infinite-task.php

Terminate:
> php 4.stop-the-daemon.php

您可以多次运行步骤2和3,但如果任务正在执行(并且尚未终止),再次运行它将不会产生任何效果。

方法

  • static TaskDaemon::setOptions()

    选项

      'namespace' => 'TaskDaemon',                // Set to your project name
      'num_workers' => 10,                        // Number of parallel workers
      'pid_file'  => '/var/run/local-daemon.pid', // PID file path
      'debug' => false,                           // Make the daemon print debug info
      'gearman' => [                              // Gearman options
          'host' => 'localhost',
          'port' => 4730,
      ],

    注意 'namespace' 和 'pid_file' 必须在所有共享同一守护进程的脚本中相同。

    注意 如果 'debug' 为 false(默认值),则守护进程或其任务将不会在控制台打印文本输出。

  • static TaskDaemon::getInstance()

    获取守护进程实例(该类是单例)

  • defineTask($name, $object)

    定义一个任务。 $name 应该是一个唯一的字符串,并且 $object 必须是从 AbstractTask 派生出来的类的实例。

  • runTask($name, $data = null, $allowDuplicates = false)

    运行先前定义的任务。 $data 将传递给任务(可以是整数、字符串或数组)。

    如果 $allowDuplicates 为 true,则可以同时运行具有相同名称和相同数据的多个任务。

    例如,当 runTask('task1', "data1") 正在执行时,对同一任务的调用:runTask("task1", "data1") 将被忽略。但是具有不同名称或数据的任务:runTask("task1", "otherdata") 或 runTask("task2") 将被执行。

  • ping()

    如果连接到Gearman服务器,则返回 true。

  • getPid()

    返回守护进程的PID,如果守护进程未运行,则返回 false。

  • start()

    在后台进行 fork() 并开始执行作业。可以多次调用,但只有第一次运行会 fork()。

  • stop()

    终止守护进程及其工作者

  • restart()

    重新启动守护进程