J'ai quelques problèmes avec Ubuntu et php5-fpm sur mon VPS . Php fonctionne bien, mais il génère une erreur de terminal lorsque j'essaie de le recharger/de le redémarrer/de l'arrêter. En gros, je ne peux pas arrêter php car il ne reconnaît pas l'instance
Il dit "reload: instance inconnue:" Si j'essaie de "redémarrer le service php5-fpm", il saisit une instance inconnue et l'indique dans les journaux
[15-Nov-2013 11:56:40] ERROR: An another FPM instance seems to already listen on /var/run/php5-fpm.sock
[15-Nov-2013 11:56:40] ERROR: FPM initialization failed
[15-Nov-2013 11:56:40] NOTICE: configuration file /etc/php5/fpm/php-fpm.conf test is successful
J'ai l'écoute php sur /var/run/php5-fpm.sock; J'utilise nginx pour le serveur web et il est correctement configuré avec
fastcgi_pass unix:/var/run/php5-fpm.sock;
(ou alors je sais) Il faut aussi mentionner que cela s’est passé après un redémarrage.
Le site fonctionne bien, mais je ne pense pas que ce soit un bon signe. Des pensées? Merci.
EDIT: J'ai fait comme suggéré dans post ci-dessous. Il semble que si je tue le processus, puis que j'utilise start/stop, cela fonctionne bien. Cependant, après avoir utilisé la commande reload, il ne faut plus reconnecter l'instance.
root@developer2:/# service php5-fpm stop
stop: Unknown instance:
root@developer2:/# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Nov14 ? 00:00:00 init
root 1101 1 0 Nov14 ? 00:00:00 /sbin/udevd --daemon
root 1168 1 0 Nov14 ? 00:00:00 /usr/sbin/sshd -D
root 1227 1 0 Nov14 ? 00:00:00 /usr/sbin/xinetd -dontfork -pidfile /var/run/xinetd.pid -stayalive -inetd_compa
root 1229 1 0 Nov14 ? 00:00:00 cron
mysql 1249 1 0 Nov14 ? 00:00:18 /usr/sbin/mysqld
syslog 1283 1 0 Nov14 ? 00:00:00 /sbin/syslogd -u syslog
memcache 1293 1 0 Nov14 ? 00:00:07 /usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1
root 1426 1 0 Nov14 ? 00:00:00 /usr/lib/postfix/master
postfix 1440 1426 0 Nov14 ? 00:00:00 qmgr -l -t fifo -u
root 1468 1 0 Nov14 ? 00:00:00 /usr/sbin/varnishd -P /var/run/varnishd.pid -a :80 -T localhost:6082 -f /etc/va
nobody 1469 1468 0 Nov14 ? 00:01:14 /usr/sbin/varnishd -P /var/run/varnishd.pid -a :80 -T localhost:6082 -f /etc/va
root 1593 1 0 Nov14 ? 00:00:14 /usr/bin/python /usr/bin/fail2ban-server -b -s /var/run/fail2ban/fail2ban.sock
root 1595 1 0 Nov14 ? 00:00:00 /usr/lib/gamin/gam_server
www-data 3535 1 0 Nov14 ? 00:00:30 php-fpm: pool www
postfix 10016 1426 0 11:18 ? 00:00:00 pickup -l -t fifo -u -c
root 10064 1168 0 11:37 ? 00:00:00 sshd: root@pts/0
root 10080 10064 0 11:37 pts/0 00:00:00 -bash
root 10143 1168 0 11:47 ? 00:00:00 sshd: root@notty
root 10159 10143 0 11:47 ? 00:00:00 /usr/lib/openssh/sftp-server
root 11330 1 0 12:03 ? 00:00:00 nginx: master process /usr/sbin/nginx
www-data 11331 11330 0 12:03 ? 00:00:00 nginx: worker process
www-data 11332 11330 0 12:03 ? 00:00:00 nginx: worker process
www-data 11333 11330 0 12:03 ? 00:00:00 nginx: worker process
www-data 11334 11330 0 12:03 ? 00:00:00 nginx: worker process
root 11465 1168 0 12:14 ? 00:00:00 sshd: root@notty
root 11481 11465 0 12:14 ? 00:00:00 /usr/lib/openssh/sftp-server
root 11519 10080 0 12:23 pts/0 00:00:00 ps -ef
root@developer2:/# kill 3535
root@developer2:/# service php5-fpm start
php5-fpm start/running, process 11529
root@developer2:/# service php5-fpm stop
php5-fpm stop/waiting
root@developer2:/# service php5-fpm start
php5-fpm start/running, process 11544
root@developer2:/# service php5-fpm stop
php5-fpm stop/waiting
root@developer2:/# service php5-fpm start
php5-fpm start/running, process 11559
root@developer2:/# service php5-fpm reload
root@developer2:/# service php5-fpm reload
reload: Unknown instance:
Edit 2: Mon php5 semble créer 3 processus
root 11813 1 1 12:34 ? 00:00:00 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)
www-data 11815 11813 0 12:34 ? 00:00:00 php-fpm: pool www
www-data 11816 11813 0 12:34 ? 00:00:00 php-fpm: pool www
Lorsque j'utilise la fonction de rechargement, le processus principal disparaît et je dois tuer manuellement les 2 autres processus pour pouvoir le redémarrer correctement.
C'est un bug d'Ubuntu. Dans /etc/init/php5-fpm.conf, il existe une ligne commentée-out reload signal USR2
, qui force la fonction reload à mettre fin au processus maître php5-fpm en envoyant SIGHUP. Tous les rechargements, redémarrages ou arrêts ultérieurs échoueront, car le processus principal est terminé.
J'ai corrigé cela dans Ubuntu 14.04 en créant un fichier /etc/init/php5-fpm.override
avec la ligne unique reload signal USR2
dans celui-ci. Crédits au commentaire de Jurian Sluiman dans this answer .
Voici le rapport de bogue primaire , les solutions de contournement proposées et la confirmation de la solution de contournement .
$ ps aux | grep php
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1966 0.0 0.9 473276 37040 ? Ss 10:03 0:00 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)
www-data 2009 0.0 1.5 478280 62500 ? S 10:03 0:01 php-fpm: pool www
www-data 2011 0.0 1.3 476504 55220 ? S 10:03 0:00 php-fpm: pool www
www-data 2012 0.0 1.6 481592 65840 ? S 10:03 0:00 php-fpm: pool www
$ Sudo service php5-fpm status
php5-fpm start/running, process 1966
$ Sudo service php5-fpm stop
php5-fpm stop/waiting
$ Sudo service php5-fpm status
php5-fpm stop/waiting
$ Sudo service php5-fpm start
php5-fpm start/running, process 2651
$ Sudo service php5-fpm status
php5-fpm start/running, process 2651
$ ps aux | grep php
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2651 0.2 0.9 473276 36996 ? Ss 10:35 0:00 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)
www-data 2654 0.0 0.1 473276 7104 ? S 10:35 0:00 php-fpm: pool www
www-data 2655 0.0 0.1 473276 7104 ? S 10:35 0:00 php-fpm: pool www
www-data 2656 0.0 0.1 473276 7104 ? S 10:35 0:00 php-fpm: pool www
Généralement, la commande service
fera l'affaire:
service php5-fpm restart
Mais si le problème "instance inconnue" apparaît, vous pouvez simplement tuer les processus et faire redémarrer le service en utilisant cette ligne:
Sudo pkill php5-fpm; Sudo service php5-fpm start
Essayez d'arrêter votre instance de php5-fpm de service php5-fpm stop
à nouveau. Attends quelques secondes. Essayez de voir quels processus n'ont pas été arrêtés avec ps -ef
. Terminez-les par kill <processId>
. Redémarrez php5-fpm à nouveau . Il semble que tous les processus enfants ne se soient pas arrêtés correctement avec la commande service ...
. J'ai des problèmes similaires sur le serveur, mais ils ne sont pas réguliers.
J'ai eu le même problème avec Envoyer pour Laravel - et c'était assez énervant. Ma solution consistait à suivre l'option 3) à https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1242376/comments/16
Créez le fichier /etc/init/php5-fpm.override contenant la seule ligne "reload signal USR2".
Déployer avec Envoyer m'a amené ici. J'ai fini par ajouter un point d'ancrage de déploiement "avant" à l'action Activer une nouvelle version avec le processus pkill php5-fpm
L'option qui a fonctionné pour moi était de réinitialiser opcache. Créez un fichier opcache-reset.php dans le répertoire racine de votre site et ajoutez:
<?php opcache_reset(); ?>
Après avoir réinitialisé Opcache, vous pouvez supprimer le fichier ou le déplacer hors de la racine de votre site.
On dirait que la commande service
échoue parfois. Je ne sais pas pourquoi, mais j'ai finalement utilisé cette solution de contournement dans /etc/logrotate.d/php5-fpm
:
/var/log/php5-fpm.log {
...
postrotate
# The original reload command did never work
#invoke-rc.d php5-fpm reopen-logs > /dev/null
# Workaround for cases when the reload command fails for some reason
service php5-fpm reload > /dev/null 2>&1
[ $? = 0 ] || ( service php5-fpm stop; pkill php5-fpm; service php5-fpm start ) > /dev/null
endscript
}
Si aucune des réponses ci-dessus ne résout le problème, testez votre configuration pour voir vos erreurs:
$ php5-fpm -t
Dans la plupart des cas, vous avez probablement commis une erreur dans votre /etc/php5/fpm/php-fpm.conf
ou /etc/php5/fpm/pool.d/www.conf
Pour moi, il s’est avéré être une erreur dans le fichier de configuration du pool (chargé à partir du répertoire pool.d)
Essayez d’exécuter php-fpm7.0 -t
pour exécuter configtest (le nom de l’exécutable peut varier en fonction de votre installation et du nom du service).