Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php gearman告诉我gearman无法连接,它肯定在运行_Php_Debian_Gearman - Fatal编程技术网

Php gearman告诉我gearman无法连接,它肯定在运行

Php gearman告诉我gearman无法连接,它肯定在运行,php,debian,gearman,Php,Debian,Gearman,我的开发服务器是Debian Squeeze,我正在运行Gearman 1.1.5,这是我从源代码和php pecl扩展v1.1.1一起编译的 如果我运行reverse_client.php脚本,我会得到GEARMAN_can_NOT_CONNECT错误 PHP警告:GearmanClient::do():发送数据包(GEARMAN\u无法\u连接)无法发送服务器选项数据包->libgearman/connection.cc:430 in/home/bealers/build/GEARMAN-1

我的开发服务器是Debian Squeeze,我正在运行Gearman 1.1.5,这是我从源代码和php pecl扩展v1.1.1一起编译的

如果我运行reverse_client.php脚本,我会得到GEARMAN_can_NOT_CONNECT错误

PHP警告:GearmanClient::do():发送数据包(GEARMAN\u无法\u连接)无法发送服务器选项数据包->libgearman/connection.cc:430 in/home/bealers/build/GEARMAN-1.1.1/examples/reverse\u client.PHP,第26行

关于这一点,这里有一些类似的帖子,它们都指向通用汽车没有运行

它肯定在运行

我从这些参数开始:

PARAMS=“--queue type=MySQL--MySQL db=test\u db--MySQL user=gearman--MySQL password=gearman”

如果我在test_db中删除gearman_queue表,然后重新启动守护进程,该表将被重新创建,因此它的mysql连接很好,并且显然正在启动

我还可以在本地主机上远程登录到4730,所以没有防火墙问题

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

### BEGIN INIT INFO
# Provides:          gearman-job-server
# Required-Start:    $network $remote_fs $syslog mysql
而且,
update-rd.c gearman作业服务器默认设置为
之后启动,现在启动时启动良好

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

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

Netstat只显示一个正在运行的进程`

tcp 0*:4730*:*收听2325/gearmand

PECL lib似乎很好:

php-i|grep gearman

/etc/php5/cli/conf.d/gearman.ini,
gearman
gearman support => enabled
libgearman version => 1.1.5

我没有主意了

我也有同样的问题,最近在几天的挫折后解决了它们(很难排除故障,因为有三个过程需要担心:-)

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


请尝试为主机名和端口指定所有值,看看这是否适用于您。

如果您使用了类似的方法,请使用

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

$client->addServers()

用这样的东西

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


PS-我使用了本地主机IP,可以用实际的主机IP替换。

可能这对某人有帮助。 如果要使用单服务器,可以使用

$client->addServer($host, $port)
e.g. $client->addServer('127.0.0.1', 4730)
$client->addServers($host1:$port1, $host2:$port2, $host3:$port3)
e.g. $client->addServers('127.0.0.1:4730', '127.0.0.2:8080')

如果要使用多个服务器,则可以使用

$client->addServer($host, $port)
e.g. $client->addServer('127.0.0.1', 4730)
$client->addServers($host1:$port1, $host2:$port2, $host3:$port3)
e.g. $client->addServers('127.0.0.1:4730', '127.0.0.2:8080')

在我的情况下,有点不同。当我的
addServer
代码在循环中时,我遇到了同样的错误

$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();
$client=new GearmanClient();
对于($i=0;$iaddServer(“127.0.0.1”,4730);
$data=json_encode(数组('job_id'=>$i,'task_name'=>'send email');
$client->addTaskBackground('sendmail',$data);
}
$client->runTasks();
这为我解决了这个问题:

$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();
$client=new GearmanClient();
$client->addServer(“127.0.0.1”,4730);
对于($i=0;$i$i,‘任务名称’=>‘发送电子邮件’);
$client->addTaskBackground('sendmail',$data);
}
$client->runTasks();

顺便说一句,我在PHP网站上打开了一个错误的文档。宾果!我必须显式地调用addServer(“localhost”,4730);Ta很明显,+1000在经历了数小时的挫折之后,这是一个简单的修复程序,它让我(macbook上的客户机、服务器和本地工作人员)的“入门”部分也过时了(可能)。还需要为gearman命令行工具显式指定端口。请参阅:在Debian上,安装后重新启动,必须显式添加服务器和端口(如上所述),并且必须在worker和client上指定相同的端口。我还尝试了非常旧的软件包,最终删除了它们,手动构建了GM 1.1.5,然后构建了PECL扩展。