我最近用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 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
第一行提出我的第一个问题,谷歌搜索几个小时后,没有给我什么...为什么写入日志有问题?我似乎无法解决这个问题.这在运行任何命令后发生.
有谁知道这些错误是什么?是时候拆卸并重新安装所有与齿轮相关的物品了吗?
在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命令行运行gearman worker.php文件.当我在正常的apache模式下测试它时,mongoDB工作正常,但是当它从gearman worker文件运行时,我得到错误"致命错误:找不到类'Mongo'".现在Mongo类来自pecl和php.ini中的mongo.so扩展.是的,试图弄清楚为什么从CLI运行的php文件是不同的.它是否使用单独的php.ini文件?
谁能为我推荐一个开源消息队列?像JMS,gearmand,zeroMq,Amazon SQS.Tt最好满足以下几点(不是强迫性的):
非常感谢!
我们正在使用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)
没有显示任何东西.
我们正在使用Gearman和Supervisord在我们的服务器上排队和运行作业.我似乎无法解决的一个问题是完全从工作队列中删除Gearman工作人员.我已经尝试删除客户端/工作者源文件以及GearmanWorker::unregister从另一个工作者调用.在运行时,$ gearadmin --status我仍然在作业队列中看到worker函数.有什么建议?
嗨,我有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)
我需要帮助,我实际上正在安装我的装置.谢谢 !
我刚刚尝试在OSX 10.10 Yosemite上安装gearman.安装看起来很好用.
brew install gearman
但是当我尝试运行命令来启动作业服务器时,gearmand -d我得到了-bash: gearmand: command not found.
我正在研究一个处理数据的项目.每隔5分钟,cron执行go脚本,这是完成所有工作.工作的一部分是采取更多的性能,更重要的是,它花费了很多时间,所以我想采取这部分过程并放入单独的脚本.这个脚本将接收proccess_id并执行那些东西,而主要工作可以继续并且很重要,它不会等待那个背景去脚本完成.后台工作完成时不需要后台工作(该信息将保存在db中).
PHP中的那种情况可以通过齿轮工人来解决,你可以调用,发送数据,你可以在你的工作中继续工作,同时齿轮工在后台自己处理数据
go lang中是否有类似的东西也可以调用而不是http?
谢谢