2015-03-09 20 views
5

Sto avendo problema provare a configurare supervisore per eseguire uno script php. supervisore in modalità debug in esecuzione mi dà questo:Supervisord "exit status 1 not expected" in esecuzione script php

2015-03-09 08:53:06,342 INFO supervisord started with pid 2030 
2015-03-09 08:53:06,358 INFO spawned: 'worker1' with pid 2031 
2015-03-09 08:53:06,423 INFO exited: worker1 (exit status 1; not expected) 
2015-03-09 08:53:06,424 INFO received SIGCLD indicating a child quit 
2015-03-09 08:53:07,440 INFO spawned: 'worker1' with pid 2032 
2015-03-09 08:53:07,587 INFO exited: worker1 (exit status 1; not expected) 
2015-03-09 08:53:07,589 INFO received SIGCLD indicating a child quit 
2015-03-09 08:53:09,604 INFO spawned: 'worker1' with pid 2033 
2015-03-09 08:53:09,756 INFO exited: worker1 (exit status 1; not expected) 
2015-03-09 08:53:09,758 INFO received SIGCLD indicating a child quit 
2015-03-09 08:53:12,775 INFO spawned: 'worker1' with pid 2034 
2015-03-09 08:53:12,973 INFO exited: worker1 (exit status 1; not expected) 
2015-03-09 08:53:12,974 INFO received SIGCLD indicating a child quit 
2015-03-09 08:53:13,976 INFO gave up: worker1 entered FATAL state, too many start retries too quickly 

La configurazione supervisord:

[program:worker1] 
command=php myScript.php 
directory=/home/path/to/script/ 
user=root 
autostart=true 
autorestart=true 
stderr_logfile=/var/log/worker1.err.log 
stdout_logfile=/var/log/worker1.out.log 
redirect_stderr=true 
environment=PATH="/usr/bin" 

Per questo test myscript.php solo stampare echo "test".PHP_EOL;

Non ci sono registri di segnalazione errori da PHP, e se eseguo la sceneggiatura tramite cli funziona come previsto. Il registro di supervisione riporta solo lo stesso risultato di debuggin.

Ho anche provato a utilizzare percorsi assoluti come /usr/bin/php /home/path/to/script/myScript.php ma non cambia nulla.

il permesso di file per myscript.php sono impostati su -rwxrwxr-x 1 root apache

Davvero non so che altro ho potuto verificare. Grazie per l'aiuto!

UPDATE_1

Ho anche cercato di monitorare altro programma come/bin/gatto o uno script bash e funziona come un fascino. Il problema sembra essere limitato a php.

UPDATE_2

Come N.B. ha sottolineato nei commenti ho cambiato lo script di test a guardare più come-lunga durata lavoro:

while(true){ 
    echo "test".PHP_EOL; 
    sleep(10); 
} 

stessa di prima, entra in stato FATAL.

+0

Non si sta dicendo nulla in "worker1.err.log"? – MegaAppBear

+0

No, niente. Non è nemmeno stato creato ... – Luciano

+0

hai provato il percorso completo per lo script nella riga "command"? – MegaAppBear

risposta

8

L'unico modo in cui è possibile riprodurre questo comportamento con il codice di uscita 1 consiste nell'utilizzare un percorso non valido per il file. Quindi per prima cosa controlla se il percorso è corretto. Ma penso che tu l'abbia già fatto prima.

Suppongo più che il file si trovi nella directory principale e che l'utente root non sia in grado di accedere ed eseguirlo. Quindi proverei a cambiare la posizione dello script.

Per il test, è possibile inserire il vostro scritto sotto /tmp/myScript.php:

cp /home/path/to/script/myScript.php /tmp/myScript.php 

e modificare la configurazione supervisord in questo modo:

[program:worker1] 
command=php myScript.php 
directory=/tmp/ 
user=root 
autostart=true 
autorestart=true 
stderr_logfile=/var/log/worker1.err.log 
stdout_logfile=/var/log/worker1.out.log 
redirect_stderr=true 
environment=PATH="/usr/bin" 

Ora supervisionati dovrebbe essere in grado di eseguire lo script.

Se funziona, è necessario verificare quale cartella impedisce a root di accedere allo script. Ciò potrebbe essere causato da una cartella codificata (e montata) (home dir?), O se la posizione è montata da un'altra posizione (samba, nfs ...). Per risolvere il problema puoi provare a cambiare utente da root al tuo utente (non lo consiglierei) o cambiare la posizione del progetto in un'altra cartella, che non si trova sotto la tua directory home.

+0

la soluzione funziona, ho appena spostato il file nella directory tmp! Ma anche se eseguo supervisore con il mio utente sotto la posizione originale, non lo fa lavoro. Proverò a capire di spostare lo script fuori dalla cartella home ... Grazie per l'aiuto! – Luciano

+0

Questo è stato molto utile grazie! Stavo usando il supervisore conf per eseguire uno script bash (per evitare problemi di percorso) e mancava sia la modifica dell'utente che la directory –

0

Sto usando Supervisord per un po ', e questo è quello che ho nel mio config:

[program:worker1] 
command=php /absolute/path/to/myScript.php 

ragione per cui sto scrivendo questo come un anwser è dovuto alla formattazione.

Inoltre, provare questo script:

for(i = 0; i < 10; i++) 
{ 
    printf("\nIteration: %d", $i); 
    usleep(1000 * 200); // 200 milliseconds between each printf 
} 

exit; 

e aggiungerlo alla vigilanza. Dovrebbe essere riavviato dopo aver fatto il suo eco.

+0

Provato questo snippet, stesso comportamento del ciclo while (true). aiuto! – Luciano

0

cercano di impostare startsecs = 0:

[program:foo] 
command = ls 
startsecs = 0 
autorestart = false 
http://supervisord.org/configuration.html 

startsecs

Il numero totale di secondi che il programma deve rimanere in esecuzione dopo un avvio di prendere in considerazione l'avvio di successo. Se il programma non rimane attivo per molti secondi dopo l'avvio, anche se esce con un codice di uscita "previsto" (vedere i codici di uscita), l'avvio verrà considerato un errore. Impostare su 0 per indicare che il programma non deve rimanere in esecuzione per un determinato periodo di tempo.

Problemi correlati