Geheimnisvoller Fehler mit php5-fpm

7

Ich habe einen sehr schwierigen Fall mit dem neuesten php5-fpm (von debphp) und nginx 1.4.3 auf Ubtuntu 12.04LTS.

Kurz gesagt, ich kann überhaupt nicht starten php5-fp. Ich erhalte immer wieder diesen Fehler im Syslog:

kernel: [1213013.564441] init: php5-fpm main process (7357) terminated with status 78
kernel: [1213013.564496] init: php5-fpm main process ended, respawning
..... (repeated several times)
kernel: [1213014.143911] init: php5-fpm respawning too fast, stopped

Mein /var/log/php5-fpm.logist überhaupt nicht besiedelt. Es gibt kein php5-fpm.sockund php5-fpm.pidin /run(oder /var/run).

Meine /etc/php5/fpm/php-fpm.confist unten: (Diese Datei scheint jetzt nicht geladen zu sein, da ich versucht habe, falsche Informationen darin zu platzieren, aber keine Änderung verursacht habe)

;;;;;;;;;;;;;;;;;;;;;
; FPM Configuration ;
;;;;;;;;;;;;;;;;;;;;;

include=/etc/php5/fpm/*.conf

;;;;;;;;;;;;;;;;;;
; Global Options ;
;;;;;;;;;;;;;;;;;;

[global]
; Pid file
; Note: the default prefix is /var
; Default Value: none
pid = /run/php5-fpm.pid
catch_workers_output = yes


; Log level
; Possible Values: alert, error, warning, notice, debug
; Default Value: notice
log_level = debug

; To configure the pools it is recommended to have one .conf file per
; pool in the following directory:
include=/etc/php5/fpm/pool.d/*.conf
include=/var/www/vhosts/mysite.com/w/w/w/www/config/fpm-pool.conf

Berechtigungsprüfung:

ls -l /etc/php5/fpm/php-fpm.conf

-rwxrwxrwx 1 root root 4641 Nov  6 01:37 /etc/php5/fpm/php-fpm.conf

Meine include=/var/www/vhosts/mysite.com/w/w/w/www/config/fpm-pool.conf(diese Datei scheint nicht mehr geladen zu sein)

[www.mysite.com]
    listen                 = /run/php5-fpm.sock
#    listen                = 127.0.0.1:9000
    listen.backlog         = -1
    listen.allowed_clients = 127.0.0.1
    listen.owner           = www.mysite.com
    listen.group           = mysite.com
    listen.mode            = 0666

    user  = www.mysite.com
    group = mysite.com

    pm                   = dynamic
    pm.max_requests      = 0
    pm.max_children      = 15
    pm.start_servers     = 2
    pm.min_spare_servers = 1
    pm.max_spare_servers = 3

    pm.status_path       = /php_pool_wwww.mysite.com_status
    ping.path            = /www.mysite.com_ping
    ping.response        = www.mysite.com_pong

    request_terminate_timeout = 30
    request_slowlog_timeout   = 20
    slowlog                   = /var/www/vhosts/mysite.com/w/w/w/www/logs/php-slow.log

    rlimit_files = 131072
    rlimit_core = unlimited

     chroot = /var/www/vhosts/mysite.com/w/w/w/www/
    ; Chdir to this directory at the start. This value must be an absolute path.
    ; Default Value: current directory or / when chroot
    ; chdir = /htdocs

    catch_workers_output = yes

    env[HOSTNAME] = $HOSTNAME
    env[TMP]      = /tmp
    env[TMPDIR]   = /tmp
    env[TEMP]     = /tmp

    security.limit_extension = .php
    ;   php_value/php_flag             - you can set classic ini defines which can
    ;                                    be overwritten from PHP call 'ini_set'.
    ;   php_admin_value/php_admin_flag - these directives won't be overwritten by
    ;                                     PHP call 'ini_set'
    php_flag[display_errors]            = on
    php_admin_value[error_log]          = /logs/php_err.log
    php_admin_flag[log_errors]          = on
    php_admin_value[memory_limit]       = 100M
    php_value[max_execution_time]       = 300

Berechtigungsprüfung:

ls -l /var/www/vhosts/mysite.com/w/w/w/www/config/fpm-pool.conf

-rwxr-xr-x 1 www.mysite.com mysite.com 1830 Nov  6 01:05 var/www/vhosts/mysite.com/w/w/w/www/config/fpm-pool.conf

Überprüfung der Benutzer- / Gruppenberechtigung:

groups www.mysite.com

www.mysite.com : www.mysite.com www-data mysite.com

Ich denke nicht, dass dies irgendetwas mit nginx zu tun hat, da es im Moment php5-fpmsowieso überhaupt nicht starten kann, aber um alle Informationen zu haben: nginx ist auch so eingestellt, dass es denselben Benutzer / dieselbe Gruppe verwendet

mr1031011
quelle
Versuchen Sie, loglevel so einzustellen, dass es in /etc/php5/fpm/php-fpm.conf debuggt. Das sollte Ihnen einige Hinweise im Fehlerprotokoll geben (Pfad in der Variablen error_log in derselben Konfigurationsdatei). Das hat mir geholfen. Das Problem bei meinem Setup war, dass die Variablen pm. * In /etc/php5/fpm/pool.d/www.conf widersprüchliche Werte enthielten. Das einzige Symptom war genau das gleiche, wie Sie es in Ihrer Frage beschrieben haben.
Frank
Ich habe das bekommen, als ich einen Tippfehler in meinem listenDirektivenpfad gemacht habe. Überprüfen Sie, ob das Verzeichnis, das Sie für Ihre Listen-Direktive angeben, vorhanden ist, wenn Sie einen Unix-Socket abhören.
Für zukünftige Leser haben die Berechtigungen für die Konfigurationsdateien nichts damit zu tun. Sie müssen nur für den Benutzer lesbar sein, unter dem ein Dienst ausgeführt wird. Sie brauchen sie definitiv nicht ausführbar oder weltbeschreibbar.
Walf

Antworten:

9

Der Prozess, den der Emporkömmling beobachtete, ist gestorben, aber die Poolarbeiter laufen immer noch. Führen Sie Folgendes aus, um das Problem zu beheben:

sudo killall php-fpm
sudo start php5-fpm

Der php5-fpm-Job wird wiederholt mit dem Status 78 beendet, bis alle alten Worker-Threads tot sind. Beachten Sie, dass der Server in diesem Status normalerweise funktionsfähig ist, obwohl upstart den Dienst nicht verwaltet. Wenn es schließlich stirbt, wird es nicht automatisch wieder erscheinen, daher sollte es so schnell wie möglich behoben werden. Ein einfacher Neustart behebt das Problem ebenfalls, führt jedoch zu Ausfallzeiten.

Zenexer
quelle
1
killallgab mir eine php-fpm: no process foundAntwort. Ich ps aux | grep phphabe alle PHP-Prozesse ausgeführt und dann manuell beendet. Danach konnte ich den php5-fpm-Dienst erfolgreich neu starten.
aldo.roman.nurena
Hat bei mir nicht funktioniert. Es gibt keine PHP-Fpm-Prozesse, die gemäß ausgeführt werden ps aux.
Jake Wilson
@ Jake Wilson Hast du überprüft, ob es unter einem anderen Namen ist? Versuchen Sie, nach PHP oder Fpm anstatt nach PHP-Fpm zu suchen. Einige Distributionen setzen die Versionsnummer in die Mitte.
Zenexer
Ja für mich ist es php5.6-fpm. Ich sehe es immer noch nicht. syslogzeigt an, dass es mit einem Fehler 78 abstürzt, wenn ich versuche, es zu starten. Ich versuche immer noch, das zu klären.
Jake Wilson
Überprüfen Sie, ob in / var / run / eine alte .sock-Datei für FPM vorhanden ist. Wenn die Sock-Datei normalerweise in einem Unterverzeichnis erstellt wird, stellen Sie sicher, dass sie vorhanden ist und über die entsprechenden Berechtigungen verfügt (777 ist niemals geeignet). Stellen Sie außerdem sicher, dass es sich nicht um ein grundlegendes Problem handelt, z. B. um eine ungültige Konfiguration. Ich glaube, Sie können die Konfiguration mitsudo php-fpm -t
Zenexer
0

Ich bin kürzlich auf dasselbe Problem gestoßen. Es stellt sich heraus, dass ein anderer Prozess bereits denselben Port überwacht hat. Um herauszufinden, welcher Prozess ausgeführt wurde, habe ich den folgenden Befehl ausgeführt:

sudo netstat -nltp

Es stellte sich heraus, dass hhvmPort 9000 bereits abgehört wurde.

tcp6       0      0 :::9000                 :::*                    LISTEN      17765/hhvm      

Sobald ich den hhvm-Daemon gestoppt habe, wurde php5-fpm erfolgreich gestartet.

Jimmy Z.
quelle
Nachdem ich mir die in der Frage veröffentlichte Datei fpm-pool.conf genauer angesehen habe, war php5-fpm nicht so konfiguriert, dass sie einen Port abhört, sondern eine Socke verwendet. Ich werde diese Antwort jedoch hier behalten, falls jemand anderes auf dasselbe Problem stößt, auf das ich gestoßen bin.
Jimmy Z