我在测试 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);
}
而PARAMS
在/etc/init.d/gearman-job-server
Ubuntu 上的作业服务器是--listen=127.0.0.1 --port=7003
.
当我在 Ubuntu 上启动 gearman 服务器时gearmand -d -p 7003
,worker 可以在作业服务器上注册,我通过检查服务器状态来确认它。但是,当我通过 启动 gearman 服务器时sudo service gearman-job-service start
,worker 无法注册。
你能对此提供一些提示吗?