Supervisord

與 Supervisord 一起執行時 Gearman 不工作

  • November 14, 2012

我正在為我的 PHP 項目(使用 pecl/gearman 作為 PHP 實施)在專用作業伺服器(Ubuntu 12.04)上測試 Gearman。

手動可以正常工作:啟動客戶端、添加作業並在單獨的 shell 中執行一個或多個工作人員按預期工作。現在我想使用 Supervisord 執行工作程序,但這會在 Gearman 日誌中生成很多以下錯誤:

WARNING [     4 ] lost connection to client recv(peer has closed connection) 127.0.0.1:37126 -> libgearman-server/io.cc:608
 ERROR [     4 ] Failed while in _connection_read() -> libgearman-server/io.cc:489

supervisor conf是預設的,我只是添加了一個程序:

[program:migration]
command=/path/to/script
process_name=%(program_name)s_%(process_num)02d
numprocs=10
stdout_logfile=/var/log/gearman.log
stderr_logfile=/var/log/gearman-error.log
stdout_logfile_maxbytes=1MB
environment=GEARMAN_USER=gearman
autostart=true
autorestart=true
user=gearman
stopsignal=KILL

Gearman工藝資訊:

gearman   9802  0.0  0.0 476116  1780 ?        Ssl  12:18   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

測試主管時:

supervisord -n -c /etc/supervisor/supervisord.conf 

我有點卡在這裡,因為錯誤消息並沒有真正返回Google的結果。任何幫助表示讚賞。

在幾乎完全相同的伺服器堆棧中遇到相同的錯誤,並找到了解決方案。由於您試圖將工作發送給未註冊的工人,因此引發了警告和錯誤。檢查您的工作人員的姓名,並在命令行上使用 ps -ax 檢查它是否正在執行。

使用 gearmand -f 在命令行上向不存在的工作人員發送作業不會給您任何回饋。使用 pecl 模組執行此操作會導致錯誤。

PS:我知道您已經跳槽並與 Beanstalkd 一起移動,但也許它可以幫助其他人。

引用自:https://serverfault.com/questions/443331