2012年10月29日星期一

GearmanMonitor 和 GearmanManager

GearmanMonitor

GearmanMonitor 是用来查看 Gearman 服务状态的工具,包括 运行中/过的队列 Queue,运行中的所有 workers,及服务器 servers。GearmanMonitor 需要有 Net_Gearman 支持。安装 pear 后,直接执行:
[bash]
[root@www bin]# pear install Net_Gearman
# 如果提示
# No releases available for package "pear.php.net/Net_Gearman"
# 则执行
[root@www bin]# pear install channel://pear.php.net/Net_Gearman-0.2.3
[/bash]

GearmanManager

GearmanManager 用来统一管理用 PHP 编写的 Gearman workers。需要 PHP 启用 pcntl。用 install/install.sh 安装完成后,根据需要和设置,修改 /etc/init.d/gearman-manager:
[bash gutter="false"]
##PATH##
DAEMON=/usr/local/bin/gearman-manager
PIDDIR=/tmp
PIDFILE=${PIDDIR}/manager.pid
LOGFILE=/tmp/gearman-manager.log
CONFIGDIR=/data/gearman-manager
GEARMANUSER="gearmand"
PARAMS="-c ${CONFIGDIR}/config.ini"
[/bash]

GearmanManager 安装时,选择的是 PECL library,启动时可能会遇见如下的问题:
[bash]
[root@www gearman-manager]# /etc/init.d/gearman-manager start
Starting gearman-manager: [ OK ]
[root@www gearman-manager]# php: libgearman/universal.cc:553: bool gearman_request_option(gearman_universal_st&, gearman_string_t&): Assertion `con->recv_state == GEARMAN_CON_RECV_UNIVERSAL_NONE' failed.
php: libgearman/universal.cc:553: bool gearman_request_option(gearman_universal_st&, gearman_string_t&): Assertion `con->recv_state == GEARMAN_CON_RECV_UNIVERSAL_NONE' failed.
.....
[/bash]

解决办法如 Bug #60764 Enabling Non-Blocking Mode causes asseration 这里所提, 修改 pecl-manager.php :
[bash]
//注释下面这句
//$thisWorker->addOptions(GEARMAN_WORKER_NON_BLOCKING);
[/bash]

没有评论:

发表评论