basarevych / task-daemon
简单的PHP守护进程库
Requires
- php: >=5.4.8
- ext-gearman: *
- ext-openssl: *
- ext-pcntl: *
- ext-posix: *
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()
重新启动守护进程