Supervisord
與 Supervisord 一起執行時 Gearman 不工作
我正在為我的 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 一起移動,但也許它可以幫助其他人。