首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gearman给了我GEARMAN_COULD_NOT_CONNECT,它肯定在运行

gearman给了我GEARMAN_COULD_NOT_CONNECT,它肯定在运行
EN

Stack Overflow用户
提问于 2013-02-14 20:43:36
回答 4查看 6.9K关注 0票数 8

我的dev服务器是Debian压缩服务器,我运行的是Gearman1.1.5,这是我从源代码中编译的,还使用了php扩展v1.1.1

如果运行reverse_client.php脚本,就会得到GEARMAN_COULD_NOT_CONNECT错误。

PHP Warning: GearmanClient::do(): send_packet(GEARMAN_COULD_NOT_CONNECT) Failed to send server-options packet -> libgearman/connection.cc:430 in /home/bealers/build/gearman-1.1.1/examples/reverse_client.php on line 26

有一些类似的帖子在这里,他们都指出通用汽车没有运行。

肯定是在跑。

我要从这些帕拉姆斯开始:

PARAMS="--queue-type=MySQL --mysql-db=test_db --mysql-user=gearman --mysql-password=gearman"

如果我将gearman_queue表放在test_db中,然后重新启动守护进程,就会重新创建表,因此它的mysql连接很好,而且它显然正在启动。

我也可以在本地主机上拨打4730,所以没有防火墙问题。

最初,GM在启动时遇到了问题,因为它是在mysql之前启动的,所以我编辑了init脚本。

代码语言:javascript
复制
### BEGIN INIT INFO
# Provides:          gearman-job-server
# Required-Start:    $network $remote_fs $syslog mysql

一个update-rd.c gearman-job-server defaults将它设置为启动之后,现在启动就很好了。

我唯一能想到的另一件事是,最初我是通过apt安装的,但是这个版本太旧了,所以我删除了它,并从源代码中编译。/usr/sbin/gearmand不再存在,唯一的版本是/usr/local/sbin/gearmand

ps ax | grep gearman只显示一个正在运行的进程。

Netstat只显示一个进程运行

tcp 0 0 *:4730 *:* LISTEN 2325/gearmand

PECL库似乎很好:

php -i | grep gearman

代码语言:javascript
复制
/etc/php5/cli/conf.d/gearman.ini,
gearman
gearman support => enabled
libgearman version => 1.1.5

我没有主意了

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-02-15 18:10:49

我也遇到了同样的问题,最近在经历了几天的挫折后才解决了(因为有三个进程需要担心,所以很难排除问题:-)

看起来(至少在我的例子中),GearmanClient::addServer()和GearmanWorker::addServer()的PHP文档是不正确的。具体来说,这些文档似乎意味着主机名和端口号是可选的,如果不指定它们,它将使用localhost和端口4730作为默认值。这个从不工作--我今天突然想到要显式地为客户机和工作进程指定它们,然后一切都开始工作了。

尝试指定主机名和端口的所有值,看看是否适合您。

票数 15
EN

Stack Overflow用户

发布于 2016-04-18 11:43:37

万一你用过这样的东西

$client->addServers('127.0.0.1',4730);

$client->addServers();

用这样的东西

$client->addServers('127.0.0.1:4730');

PS -我已经使用本地主机IP,这可以替换为实际主机IP。

票数 2
EN

Stack Overflow用户

发布于 2019-01-30 14:00:34

对我来说就有点不同了。当循环中有我的addServer代码时,我得到了同样的错误。

代码语言:javascript
复制
$client = new GearmanClient();
for ($i=0; $i<100000; $i++) {
  $client->addServer("127.0.0.1", 4730);
  $data = json_encode(array('job_id' => $i, 'task_name' => 'send-email'));
  $client->addTaskBackground('sendEmail', $data);
}
$client->runTasks();

这个帮我修好了:

代码语言:javascript
复制
$client = new GearmanClient();
$client->addServer("127.0.0.1", 4730);
for ($i=0; $i<100000; $i++) {
  $data = json_encode(array('job_id' => $i, 'task_name' => 'send-email'));
  $client->addTaskBackground('sendEmail', $data);
}
$client->runTasks();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14883681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档