【问题标题】:Gearman commands and service don't work the sameGearman 命令和服务的工作方式不同
【发布时间】:2013-03-11 02:54:14
【问题描述】:

我在测试 Gearman 设置时遇到了一个奇怪的问题。由于我只有一台 PC 并且想测试 gearman 跨平台功能,我在 Win7 系统的虚拟机上的 Ubuntu 12.04 上安装了 gearman 作业服务器,并在 Win7 上启动了 worker。 virtualbox和宿主机相互ping通。这是我的工人的代码:

#!/usr/bin/perl
use Gearman::Worker;

my $worker1 = Gearman::Worker->new;
$worker1->job_servers('10.38.50.158');

# register job
$worker1->register_function( print_task1 => \&print_task1 ); 

$worker1->work while 1; 

sub print_task1{
    my ($job) = @_;
    print "Worker1 starts...\n";
    ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
    printf("%d:%d:%d\n",$hour,$min,$sec);
    sleep 10;
    $job->set_status(50,100);
    sleep 10;
    $job->set_status(100,100);
}

Ubuntu 上作业服务器的/etc/init.d/gearman-job-server 中的PARAMS--listen=127.0.0.1 --port=7003

当我在 Ubuntu 上使用 gearmand -d -p 7003 启动 gearman 服务器时,worker 可以在作业服务器上注册,我通过检查服务器状态确认了这一点。但是,当我通过sudo service gearman-job-service start启动gearman服务器时,worker注册失败。

您能否就此提供一些提示?

【问题讨论】:

    标签: perl gearman


    【解决方案1】:

    --listen 表示服务器必须监听的地址。如果你使用--listen=127.0.0.1,服务器只会捕获本地主机的worker注册。默认值为INADDR_ANY,这意味着如果您将此选项留空,服务器将侦听任何机器。

    【讨论】:

      【解决方案2】:

      终于找到原因了:job server的/etc/init.d/gearman-job-server中的PARAMS应该只有--port=7003,没有--listen=127.0.0.1!我不知道这里有什么问题,我只是尝试了一下。我还在学习 Gearman,但我确信我之前犯了一个非常愚蠢的错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多