我正在尝试通过以下命令在我的 Ubuntu 12.04 机器上安装 Gearman
sudo apt-get install gearman-job-server libgearman-dev
sudo apt-get install php-pear php5-dev
Run Code Online (Sandbox Code Playgroud)
以上命令运行正常,但是当我运行时
sudo pecl install gearman
Run Code Online (Sandbox Code Playgroud)
它给出的错误如下
checking whether to enable gearman support... yes, shared
found in /usr
checking for gearman_client_set_context in -lgearman... yes
checking for gearman_worker_set_server_option in -lgearman... yes
checking for gearman_job_error in -lgearman... no
configure: error: libgearman version 1.1.0 or later required
ERROR: `/tmp/pear/temp/gearman/configure' failed
Run Code Online (Sandbox Code Playgroud)
我找不到如何安装它。
我不确定这是否可行,但我可以通过网络服务器显示 linux 命令的标准输出吗?
我要运行的命令是echo 'status' | nc localhost 4730返回一个带有齿轮工作服务器状态的字符串。
$echo 'status' | nc localhost 4730
function1 0 0 0
function2 0 0 1
Run Code Online (Sandbox Code Playgroud)
我的服务器正在运行 nginx。我想打开一个像http://domain.tld/gearman-status这样的 URL ,它应该通过运行该命令返回当前状态。
我应该在 nginx 的位置块中放什么来做到这一点?
location /gearman-status {
?
}
Run Code Online (Sandbox Code Playgroud)
谢谢
我已经安装了 Gearman,运行和传递作业非常好,但仅当我使用以下命令手动启动作业队列时:
/usr/sbin/gearmand -p 4730 -vvvv -u gearman
Run Code Online (Sandbox Code Playgroud)
如果我这样做,我有另一个 EC2 实例作为工作人员运行,第三个正在传递作业。完美,但我不想让终端保持打开(显然)或乱七八糟的屏幕。我希望它在启动时运行。
所以:
$ ps aux | grep gearman
gearman 745 0.2 0.2 8096 1388 ? Ss 19:11 0:00 /usr/sbin/gearmand --pid-file=/var/run/gearman/gearmand.pid --user=gearman --daemon --log-file=/var/log/gearman-job-server/gearman.log --listen=127.0.0.1
Run Code Online (Sandbox Code Playgroud)
在我看来很好。但是当我告诉我的工作人员连接时:
$ php workers/resize.php
Waiting for job...
PHP Warning: GearmanWorker::work(): gearman_connection_flush:write:111 in /home/ubuntu/workers/resize.php on line 20
Run Code Online (Sandbox Code Playgroud)
失败!
此外,我注意到日志文件中没有任何内容(它不是自动创建的,而是在安装时在此 init.d 脚本中引用的)。我尝试创建它,甚至 chowning 给 gearman:gearman 但那里没有乐趣,所以很难调试。