2013-02-14 10 views
8

Il mio server dev è Debian Squeeze e sto correndo Gearman 1.1.5, che ho compilato dai sorgenti con il php PECL estensione v1.1.1Gearman mi dà GEARMAN_COULD_NOT_CONNECT, è sicuramente in esecuzione

Se corro il reverse_client .php script Ottengo l'errore GEARMAN_COULD_NOT_CONNECT.

PHP Warning: GearmanClient::do(): send_packet(GEARMAN_COULD_NOT_CONNECT) Failed to send server-options packet -> libgearman/connection.cc:430 in /home/bealers/build/gearman-1.1.1/examples/reverse_client.php on line 26

ci sono un paio di messaggi simili su qui su questo e tutti rimandano a GM non è in esecuzione.

È sicuramente in esecuzione.

Sto iniziando con questi params:

PARAMS="--queue-type=MySQL --mysql-db=test_db --mysql-user=gearman --mysql-password=gearman"

Se io eliminare la tabella gearman_queue in TEST_DB poi riavviare il demone della tabella viene ricreata, quindi la sua connessione MySQL sta bene e sta chiaramente iniziando.

Posso anche telnet su 4730 su localhost, quindi non c'è alcun problema con il firewall.

Inizialmente GM aveva problemi a partire, perché stava cominciando prima di mysql, quindi ho modificato lo script di init

### BEGIN INIT INFO 
# Provides:   gearman-job-server 
# Required-Start: $network $remote_fs $syslog mysql 

e un update-rd.c gearman-job-server defaults set per avviare dopo e inizia bene al boot up ora.

L'unica altra cosa che posso pensare è che inizialmente avevo installato via apt ma la versione era vecchia quindi l'ho rimossa e compilata dal sorgente./usr/sbin/gearmand non esiste più l'unica versione è/usr/local/sbin/gearmand

ps ax | grep gearman mostra solo un processo in esecuzione.

Netstat mostra solo un processo running`

tcp 0 0 *:4730 *:* LISTEN 2325/gearmand

Il lib PECL sembra che vada bene:

php -i | grep gearman

/etc/php5/cli/conf.d/gearman.ini, 
gearman 
gearman support => enabled 
libgearman version => 1.1.5 

Sono fuori di idee

+0

Ho anche provato i pacchetti veramente vecchi e alla fine ho finito per rimuoverli, costruendo GM 1.1.5 a mano e poi costruendo l'estensione PECL. – Eno

risposta

15

ho avuto lo stesso problema e recentemente sol dopo un paio di giorni di frustrazione (difficile da risolvere poiché ci sono tre processi di cui preoccuparsi :-)

Appare (almeno nel mio caso) che la documentazione di PHP per GearmanClient :: addServer() e GearmanWorker: : addServer() non è corretto. In particolare, i documenti sembrano implicare che il nome host e il numero di porta siano opzionali e che utilizzeranno localhost e porta 4730 come valori predefiniti se non li si specifica. Questo mai funziona: improvvisamente mi è venuto in mente oggi di provare a specificarli esplicitamente sia per i processi client sia per quelli di lavoro e tutto ha iniziato a funzionare.

Provare a specificare tutti i valori per hostname e porte e vedere se questo funziona per voi.

+1

BTW, ho aperto un bug per la documentazione errata sul sito PHP. – Eno

+3

Bingo! Ho dovuto chiamare esplicitamente addServer ("localhost", 4730); Ta molto. –

+2

+1000 Dopo ore di frustrazione, questa è la semplice correzione che ha reso tutto funzionante per me (Client, server e worker locali su un macbook) – Asciiom

2

Nel caso in cui se si è usato qualcosa di simile

$ client-> addServers ('127.0.0.1', 4730);

o

$ client-> addServers();

uso qualcosa di simile

$ client-> addServers ('127.0.0.1:4730');

PS - ho usato localhost IP, questo può essere sostituito con host effettivo IP.

Problemi correlati