neoseeker/fresque

一个用于管理你的php-resque工作进程的命令行工具

1.1.2 2013-02-07 17:19 UTC

This package is auto-updated.

Last update: 2024-09-14 07:47:45 UTC


README

#Fresque

Fresque是一个用于管理你的php-resque工作进程的命令行工具。

##先决条件

如果你不知道什么是resqueredis,请查看它们的官方网站

这个工具旨在通过使与php-resque的交互更加简单和友好来简化你的生活。你应该已经对php-resque有一定的了解,并且已经安装并运行了php-resque。在这个教程中,我将假设你已经有足够的知识来使用php-resque正常启动一个工作进程。

##什么是Fresque

Fresque是一个命令行工具。但它不是通过

$ QUEUE=file_serve php resque.php

来启动一个工作进程,而是

$ fresque start -q file_serve

它更友好,并提供更多选项,如重启停止等……Php-resque和resque默认不提供一种现成的方式来停止你的工作进程。你只需终止工作进程。有了Fresque,你可以轻松地停止和重启你的工作进程。

##安装

克隆git仓库

$ git clone git://github.com/kamisama/Fresque.git

cd到你刚刚克隆的Fresque文件夹

$ cd the/fresque/folder/you/just/cloned

然后下载Composer

$ curl -s https://getcomposer.org/installer | php

最后,安装依赖项

$ php composer.phar install

注意:官方php-resque使用redisent作为redis api。如果你想使用php-redis,请查看我的分支

##配置

提供了一个fresque.ini文件来设置你的工作进程的默认参数,以及其他由fresque使用的选项,例如redis连接选项。它有良好的文档,你应该不会有困难地填写它。

##使用方法

一些示例可以在本页面的末尾找到。

通常,首先将fresque可执行文件添加到你的系统路径中是明智的。然后你只需调用

$ fresque <command>

或者如果你没有添加它,

$ cd /path/to/the/resque/executable
$ ./fresque <command>

有很多有趣的命令可用

  • start

注意:在Neoseeker上,我们已经覆盖了start命令以像加载一样操作,这将启动预定义的工作进程。

要启动一个新的resque工作进程。默认情况下,它将使用在fresque.ini中定义的默认配置,用于队列名称、轮询频率以及其他各种选项。你可以使用选项标志覆盖所有这些。可用选项

-u--user:运行php进程的用户。应该是运行你的php应用程序的用户,通常是apache的www-data。使用不同的用户可能会导致某些情况下的权限问题。

-q--queue:队列名称列表,用逗号分隔。

-i--interval:轮询频率。每次轮询之间的秒数。

-n--workers:在同一队列上工作的工人数量。使用pcntl进行进程fork,确保你的PHP是用它编译的。

-l--log:日志文件的绝对路径。你可以为每个工作进程设置不同的日志。必须具有--user权限来读取和写入该文件(以及父文件夹,因为如果文件不存在,则会创建该文件)。

要使用不同的选项创建多个队列,只需再次运行start

  • stop

关闭工作进程。将等待所有任务完成,然后关闭工作进程。如果有多个工作进程正在运行,您需要从工作进程菜单中选择要停止的工作进程。

-f--force:强制关闭,不等待任务完成。所有任务将失败。-w--all:停止所有工作进程,跳过工作进程菜单。

  • 重启

重启所有工作进程,保留其设置。

  • 加载

启动预定义的一组工作进程(在您的配置文件中设置)。有关更多信息,请参阅fresque.ini。

  • 统计信息

显示失败/处理过的任务总数,以及每个工作进程的各种统计信息。

  • 查看日志末尾

查看工作进程的日志。如果您有多个日志文件,您需要从日志文件菜单中选择要查看的日志。

  • 入队

将任务添加到队列。需要3个参数

queuename:您要将此任务入队的队列名称 jobclass:执行任务的类名称,以及您的应用程序自动加载器必须加载的类。 arguments:传递给任务的逗号分隔的参数列表。

如果任务成功入队,将打印出任务ID

成功入队任务并不意味着它将成功执行

  • 测试

测试您的配置。如果没有提供选项,它将测试您的 fresque.ini。它接受所有选项,让您测试它们。

最后,有一些全局选项,可以用于所有命令。除非您使用这些选项,否则将使用您的配置文件中的默认值。

-s--host:Redis主机名

-p--port:Redis端口号

-b--lib:php-resque库的绝对路径。当您已经有了自己的库,并且不想使用fresque提供的库时使用。

-c--config:您的配置文件的绝对路径。您可以为不同的工作进程使用不同的配置。默认配置是位于可执行文件同一目录下的fresque.ini

-a--autoloader:您的应用程序入口点的绝对路径。通常,它应该是将自动加载所有任务类的文件。

##示例

让我们以配置文件(fresque.ini)中定义的默认设置启动工作进程

$ fresque start

让我们启动另一个名为activity的工作进程,其池化频率为1秒。此外,我想有两个工作进程在这个队列上工作。

$ fresque start -q activity -i 1 -n 2

然后,我想另一个工作进程,该工作进程将在defaultactivity队列上同时工作。

$ fresque start -q default,activity

等等,我还有一个在另一个redis服务器上的resque。我想将它的活动记录在其他日志文件中:remote.log

$ fresque start -s 192.168.1.26 -p 6390 -q myspecialqueue -l /path/to/remote.log

如果您在别处有配置文件,以及您的php-resque库也在别处

$ fresque start -c /path/to/my-config.ini -b /path/to/my/custom/php-resque

要查看您的工作进程的统计信息(了解您有多少个工作进程,处理/失败的任务数,正常运行时间)

$ fresque stats

应该输出类似的内容

Worker statistics

Jobs Stats
   Processed Jobs : 18617
   Failed Jobs    : 319

Workers Stats
   Active Workers : 6
	Worker : KAMISAMA-MAC.local:33197:default
	 - Started on     : Wed May 16 00:33:04 EDT 2012
	 - Uptime         : less than a minute
	 - Processed Jobs : 0
	 - Failed Jobs    : 0
	Worker : KAMISAMA-MAC.local:33207:default
	 - Started on     : Wed May 16 00:33:08 EDT 2012
	 - Uptime         : less than a minute
	 - Processed Jobs : 0
	 - Failed Jobs    : 0
	Worker : KAMISAMA-MAC.local:33215:myspecialqueue
	 - Started on     : Wed May 16 00:33:10 EDT 2012
	 - Uptime         : less than a minute
	 - Processed Jobs : 0
	 - Failed Jobs    : 0
	Worker : KAMISAMA-MAC.local:33232:activity
	 - Started on     : Wed May 16 00:33:16 EDT 2012
	 - Uptime         : less than a minute
	 - Processed Jobs : 0
	 - Failed Jobs    : 0
	Worker : KAMISAMA-MAC.local:33233:activity
	 - Started on     : Wed May 16 00:33:16 EDT 2012
	 - Uptime         : less than a minute
	 - Processed Jobs : 0
	 - Failed Jobs    : 0
	Worker : KAMISAMA-MAC.local:33223:default,activity
	 - Started on     : Wed May 16 00:33:13 EDT 2012
	 - Uptime         : less than a minute
	 - Processed Jobs : 0
	 - Failed Jobs    : 0

请记住,您可以使用全局选项(-s、-p等)与任何命令一起使用

$ fresque stop -c /path/to/my-config.ini -s 192.168.1.26

让我们将任务入队到activity队列

$ fresque enqueue activity PageVisit 5 /index.php 158745693

php-resque将运行此任务,通过实例化类PageVisit,然后调用带有参数5/index.php158745693perform()方法。为了实例化PageVisit类,php-resque应该知道在哪里找到它。这应该通过您应用程序的自动加载器(--include)来完成。

哦,如果您想出于任何原因重启所有工作进程

$ fresque restart

如果您完成工作,并且想要停止所有工作进程,只需

$ fresque stop --all

它将输出类似的内容

Shutting down Resque Worker complete
Killing 6 workers ...
Killing 33197 … Done
Killing 33207 … Done
Killing 33215 … Done
Killing 33232 … Done
Killing 33233 … Done
Killing 33223 … Done

如果它说“没有活跃的工作进程要杀死”,但是您确信有工作进程,请参阅说明。

###同时启动所有工作进程

我们刚刚创建了6个工作进程,调用了5次start(记住,第二个start使用-n 2创建了2个工作进程)。但有一种方法可以只使用一个命令就启动所有工作进程,这在每次都需要启动许多工作进程时非常有用。

只需在配置文件中的[Queues]部分设置所有工作进程的设置(配置文件的说明中可找到操作流程),然后使用以下命令启动所有工作进程:

$ fresque load

##注意事项

###可以使用test测试您的配置

提供了一个用于测试配置文件的测试工具,只需调用test。这将测试运行fresque所需的最小要求

  • 您的Redis主机名和端口号不为空
  • 您可以使用指定的主机名:端口号连接到Redis服务器
  • 日志文件存在且可写,或者如果不存在,其父目录可写
  • php-resque库的路径有效
  • 您应用程序的自动加载器路径有效

此操作不会测试应用程序自动加载器的内容,因此如果其中包含触发致命错误的代码,fresque将无法知道,并将返回一个成功,但工作进程将无法启动,就像我们上面说的那样。

您可以通过传递选项来测试配置文件内的更多设置。选项将覆盖配置中定义的设置

$ fresque test -s 195.168.1.26 -p 6890

这将测试您的配置文件,但使用指定的Redis主机名和端口号

您还可以测试其他配置文件

$ fresque test -c /my/other/config/file.ini

测试结果将如下所示

Testing configuration
Redis configuration .....OK
Redis server ............OK
Log File ................OK
PHPResque library .......OK
Application autoloader ..OK

Your settings seems ok

##已知问题

###stop命令无法停止工作进程

当您尝试停止工作进程时,会出现这种情况,但会显示“没有要终止的活动工作进程…”。使用stats查看将告诉您有工作进程。这发生在--user没有足够的权限来终止工作进程,或者工作进程PID被“更改”时。在某些奇怪的情况下,工作进程会fork一个子进程来执行作业,但在之后没有切换回父作业。子进程成为父工作进程,但没有通知Resque,工作进程列表过时。

终止这些“流浪”工作进程的唯一方法是通过找到它们的PID并手动终止它们。

	ps aux | grep resque.php

它将打印进程列表。找到流浪工作进程的PID并终止它们

	sudo kill YOUR_PID

##注意事项

###查看您的日志

日志会告诉您有关作业问题和php-resque工作进程当前状态的所需所有信息。它会告诉您作业何时入队,何时即将执行,以及其问题(成功/失败)。它还会显示可能发生的所有php相关错误。请经常检查它们,因为fresque不会捕获这些错误。

##背景

Fresque是我另一个插件cake-resque的衍生作品,是一个用于管理php-resque的命令行工具,但位于cakephp控制台中。非常方便,但仅限于cakephp框架。我希望发布一个可以在任何php环境中工作的工具。

##致谢

  • PHP-Resque由Chris Boulton编写
  • 基于Resque by defunkt
  • Fresque由Wan Qi Chen(kamisama)编写