标签: gearman

Supervisord为PHP和Gearman添加了多个进程

我最近用PHP5-FPM,Gearman和Supervisor建立了Ubuntu Natty.我编辑了我的Supervisord配置来运行Gearman工作者.

[program:gearman] 
command=/usr/bin/php php_gearman_worker.php
numprocs=1 
directory=/root/sandbox
stdout_logfile=/root/sandbox/supervisord.log 
environment=GEARMAN_USER=gearman 
autostart=true
autorestart=true
user=gearman
Run Code Online (Sandbox Code Playgroud)

这是lsof -i -P我运行supervisord之前的相关信息(仅显示gearmand和php进程):

COMMAND     PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
gearmand  29314  gearman    6u  IPv4 328139      0t0  TCP localhost:4730 (LISTEN)    
Run Code Online (Sandbox Code Playgroud)

而这就是我lsof -i -P追求的时候所得到的/etc/init.d/supervisor stop && /etc/init.d/supervisor start.

COMMAND     PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
gearmand  29314  gearman    6u  IPv4 328139      0t0  TCP localhost:4730 (LISTEN)
gearmand  29314  gearman   11u  IPv4 328206      0t0  TCP localhost:4730->localhost:39072 (ESTABLISHED)
php       29571  gearman    4u …
Run Code Online (Sandbox Code Playgroud)

php gearman supervisord

3
推荐指数
1
解决办法
6394
查看次数

gearman问题和php cli

当我尝试使用php cli在终端中运行命令时,我遇到了一些齿轮问题.例如,我运行此命令:

gearmand --log-file=/var/log/gearman-job-server/gearman.log

得到:

gearmand: Could not open log file "/usr/local/var/log/gearmand.log", from "/home/jeitnier", switching to stderr. (No such file or directory)

ERROR 2013-01-25 16:25:53.000000 [ main ] bind(Address already in use) -> libgearman-server/gearmand.cc:612

ERROR 2013-01-25 16:25:53.000000 [ main ] bind(Transport endpoint is not connected) -> libgearman-server/gearmand.cc:626

第一行提出我的第一个问题,谷歌搜索几个小时后,没有给我什么...为什么写入日志有问题?我似乎无法解决这个问题.这在运行任何命令后发生.

有谁知道这些错误是什么?是时候拆卸并重新安装所有与齿轮相关的物品了吗?

php terminal ubuntu gearman

3
推荐指数
1
解决办法
3797
查看次数

当使用&&代替'和'时,为什么这个循环返回1?

while($row = mysql_fetch_assoc($result) and $runningOK)循环中捣乱我... 如果使用PHP &&运算符代替and当时mysql_fetch_assoc失败并且1在运行时只返回数字.

我已经尝试过mysql_fetch_array(),我仍然有1问题.当是时,只有当我更换&&and像目前的while说法是正确的行返回.

我在之前,之内和之后放置了调试语句来确保这一点.我想知道这是一个PHP怪癖还是我无法解释的东西.

// Query
$selectQuery = "SELECT * FROM jobs_cache LIMIT 20";
// Run the Selection Query.
$result = mysql_query($selectQuery)
    or die('Query Failed: '.mysql_error());

// Loop through results.
$runningOK = TRUE;
$resubmitList = array();

while($row = mysql_fetch_assoc($result) and $runningOK)
{
    // Resubmit The Job
    try
    {
        $client->addTaskBackground($row['function_name'],$row['job_data']);
        $resubmitList[] = (string)$row['job_cache_id'];
    }
    catch(Exception $e)
    { …
Run Code Online (Sandbox Code Playgroud)

php logic gearman

2
推荐指数
1
解决办法
286
查看次数

pecl没有在php CLI模式下工作(涉及Gearman中的mongoDB)

出于测试目的,我在本地主机上运行齿轮.所以我从php命令行运行gearman worker.php文件.当我在正常的apache模式下测试它时,mongoDB工作正常,但是当它从gearman worker文件运行时,我得到错误"致命错误:找不到类'Mongo'".现在Mongo类来自pecl和php.ini中的mongo.so扩展.是的,试图弄清楚为什么从CLI运行的php文件是不同的.它是否使用单独的php.ini文件?

php pecl gearman mongodb

2
推荐指数
1
解决办法
1892
查看次数

推荐一个开源消息队列服务

谁能为我推荐一个开源消息队列?像JMS,gearmand,zeroMq,Amazon SQS.Tt最好满足以下几点(不是强迫性的):

  1. 分布式和可扩展.
  2. 支持异步消息.
  3. 最好支持pub/subscribe
  4. 高可用性,最好永不丢弃消息.
  5. 高性能
  6. 最好支持php sdk,以及c/c ++开发的mq服务器.
  7. 使用方便
  8. 该项目是活跃的.

非常感谢!

jms message-queue gearman zeromq mq

2
推荐指数
1
解决办法
2422
查看次数

PHP Gearman任务没有返回jobHandle

我们正在使用Gearman,什么时候使用doLowBackground或doHigh等方法,这些都会返回jobHandle,但是当我们执行任务时,没有jobHandle对象.我们得到了GearmanTask对象,而不是得到jobHandlestring(0) ""

有什么想法会导致这种情况吗?

谢谢!

编辑:这是代码和其他信息:

// $client = \GearmanClient; // servers added, all that jazz
// $workload = 'string';

$arguments = array(
    'handleJob',
    $workload
);

$task = call_user_func_array(array($client, $method), $arguments);

if ($task instanceof GearmanTask) {
    $handles[] = $task->jobHandle();
}

$data = $client->runTasks();
Run Code Online (Sandbox Code Playgroud)

任务正确运行但$handle正在填充空字符串(每个任务添加一个)

编辑:这是我们得到的回应:

object(GearmanTask)#294 (0) {
}
Run Code Online (Sandbox Code Playgroud)

我已经抛弃了每一个PECL齿轮手对象,没有任何东西显示,这里是客户端,填充了服务器,选项等

object(GearmanClient)#291 (0) {
}
Run Code Online (Sandbox Code Playgroud)

没有显示任何东西.

php gearman

2
推荐指数
1
解决办法
369
查看次数

作业服务器 - 从队列中删除Gearman worker函数

我们正在使用Gearman和Supervisord在我们的服务器上排队和运行作业.我似乎无法解决的一个问题是完全从工作队列中删除Gearman工作人员.我已经尝试删除客户端/工作者源文件以及GearmanWorker::unregister从另一个工作者调用.在运行时,$ gearadmin --status我仍然在作业队列中看到worker函数.有什么建议?

php gearman process-control job-scheduling supervisord

2
推荐指数
1
解决办法
2475
查看次数

更改Pecl安装目录

嗨,我有pecl安装的问题,我遇到的问题是我正在安装gearman,我现在正处于安装pecl PHP扩展的阶段.

它应该是一个简单的执行命令:

$ sudo pecl install gearman
Run Code Online (Sandbox Code Playgroud)

安装成功,我甚至可以测试包含的PHP

<?php
echo "Gearman version: " . gearman_version() . PHP_EOL;
?>
Run Code Online (Sandbox Code Playgroud)

使用以下命令在CLI php中执行:

$ php gearman_version.php
Run Code Online (Sandbox Code Playgroud)

诀窍.不幸的是我正在使用堆栈.lappstack确切地说,我在lappstack的安装中有一个单独的php,它位于:

/home/userName/lappstack-5.4.34-0/php
Run Code Online (Sandbox Code Playgroud)

其中php/etc包含我的php.ini供web使用.

现在,回到齿轮装置的pecl装置,执行pecl安装齿轮装置 结果齿轮装置安装在单独的php5安装中,并且gearman.so安装在:

/usr/lib/php5/20121212/gearman.so
Run Code Online (Sandbox Code Playgroud)

理想情况下,齿轮手应该包含在:

/home/userName/lappstack-5.4.34-0/php/lib/php/extensions/gearman.so
Run Code Online (Sandbox Code Playgroud)

像我所有的其他扩展.

这实际上导致应用程序无法使用齿轮机扩展.而指向的php.ini,使用gearman实际上就是:

/etc/php5/cli
Run Code Online (Sandbox Code Playgroud)

/etc/php5/apache2
Run Code Online (Sandbox Code Playgroud)

我需要帮助,我实际上正在安装我的装置.谢谢 !

linux installation pear pecl gearman

2
推荐指数
1
解决办法
9545
查看次数

使用自制程序在OSX上安装后无法运行gearmand

我刚刚尝试在OSX 10.10 Yosemite上安装gearman.安装看起来很好用.

brew install gearman

但是当我尝试运行命令来启动作业服务器时,gearmand -d我得到了-bash: gearmand: command not found.

macos homebrew gearman

2
推荐指数
1
解决办法
1452
查看次数

PHP齿轮工人相当于GO?

我正在研究一个处理数据的项目.每隔5分钟,cron执行go脚本,这是完成所有工作.工作的一部分是采取更多的性能,更重要的是,它花费了很多时间,所以我想采取这部分过程并放入单独的脚本.这个脚本将接收proccess_id并执行那些东西,而主要工作可以继续并且很重要,它不会等待那个背景去脚本完成.后台工作完成时不需要后台工作(该信息将保存在db中).

PHP中的那种情况可以通过齿轮工人来解决,你可以调用,发送数据,你可以在你的工作中继续工作,同时齿轮工在后台自己处理数据

go lang中是否有类似的东西也可以调用而不是http?

谢谢

php go gearman

2
推荐指数
1
解决办法
288
查看次数