7 votes

Démarrer PHP-FPM avec l'option root automatiquement

J'ai essayé de faire tourner PHP-FPM dans un pool en tant que root, mais je n'arrive pas à ajuster les paramètres de démarrage de init.d.

Cela fonctionne lorsque l'on démarre PHP-FPM depuis la CLI (avec sudo php-fpm7.0 -DRy /etc/php/7.0/fpm/php-fpm.conf mais je n'arrive pas à le faire fonctionner avec l'option service ( sudo service php7.0-fpm (re)start . Ainsi, à chaque redémarrage du serveur, PHP-FPM échoue et je dois exécuter cette commande.

J'ai essayé de placer un fichier "php-fpm7.0" dans le dossier de l'utilisateur. /etc/default avec la ligne DAEMON_ARGS="--daemonize --fpm-config $CONFFILE -R" et j'ai même essayé d'ajouter le -R au paramètre do_start fonction dans /etc/init.d/php7.0-fpm directement, mais je continue à obtenir le please specify user and group other than root erreur.

Y a-t-il un moyen de faire en sorte que cela fonctionne au démarrage et avec le service commande ?


Hors sujet : Je connais tous les risques et je sais pourquoi je ne devrais pas le faire, mais je le veux quand même. J'ai besoin d'exécuter quelques scripts pour créer des répertoires, exécuter des commandes chown etc. et le pool sera dédié à un backend utilisé par un bloc de serveurs nginx qui est joignable depuis l'intérieur du réseau privé 192.168.1.X uniquement sur un chemin URL spécifique.

Comme alternative, je pourrais mettre en place un cron script qui exécute un PHP script en tant que root, mais cette approche me coûterait beaucoup plus d'heures.

12voto

Ryan Babchishin Points 6040

Sur les systèmes systemd, vous devrez peut-être configurer ceci via systemd plutôt que via system V init scripts.

Les étapes ci-dessous sont testées et fonctionnent sur Ubuntu 16.04 LTS. Et voici votre coupable pour la redirection des scripts d'init :

/lib/lsb/init-functions.d/40-systemd

1. Modifiez votre configuration de pool php-fpm, par exemple. /etc/php/7.0/fpm/pool.d/www.conf et configurer root comme utilisateur/groupe en tant que root

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = root
group = root

2. Modifier /lib/systemd/system/php7.0-fpm.service et ajoutez -R à la ExecStart pour permettre au service de fonctionner en tant que root

ExecStart=/usr/sbin/php-fpm7.0 --nodaemonize --fpm-config /etc/php/7.0/fpm/php-fpm.conf -R

3. Rechargez la configuration

$ systemctl daemon-reload

4. Démarrer le service

$ systemctl start php7.0-fpm

5. Vérifier

$ ps auwx | grep php
root     32061  0.0  0.0 221680 26084 ?        Ss   16:59   0:00 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)
root     32063  0.0  0.0 221680  4992 ?        S    16:59   0:00 php-fpm: pool www
root     32064  0.0  0.0 221680  4992 ?        S    16:59   0:00 php-fpm: pool www

3voto

redelschaap Points 235

J'ai finalement trouvé une solution. Il s'est avéré qu'Ubuntu utilisait systemd pour démarrer et redémarrer PHP-FPM, et ignorait donc le message init.d des fichiers.

Si vous rencontrez des problèmes avec les ajustements de init.d qui sont ignorés et que vous êtes sur Ubuntu 15.04 ou plus, il y a de grandes chances que ce service ait un problème de sécurité. systemd ainsi que le fichier de service.


Donc la solution à mon problème : mon système a un fichier nommé /lib/systemd/system/php7.0-fpm.service qui est utilisé par systemd . Avec la commande cat /lib/systemd/system/php7.0-fpm.service vous pouvez voir le contenu du fichier de service. Vous remplacez php7.0-fpm.service avec le nom de votre fichier de service. Le fichier de service de PHP7.0-FPM ressemble à ceci :

[Unit]
Description=The PHP 7.0 FastCGI Process Manager
Documentation=man:php-fpm7.0(8)
After=network.target

[Service]
Type=notify
PIDFile=/run/php/php7.0-fpm.pid
ExecStart=/usr/sbin/php-fpm7.0 --nodaemonize --fpm-config /etc/php/7.0/fpm/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

Dans mon cas, j'ai dû ajuster le ExecStart règle. Nous n'avons pas besoin d'éditer ce fichier, car systemd offre un moyen de passer outre les règles spécifiques. La commande sudo systemctl edit php7.0-fpm.service ouvrira un éditeur dans lequel vous pourrez entrer ces règles. Il suffit de saisir la ou les sections de la ou des règles que vous souhaitez ajuster et d'enregistrer le fichier. Dans mon cas, cela ressemble à ceci :

[Service]
ExecStart=
ExecStart=/usr/sbin/php-fpm7.0 --allow-to-run-as-root --nodaemonize --fpm-config /etc/php/7.0/fpm/php-fpm.conf

Veillez à réinitialiser d'abord la règle que vous voulez modifier, sinon les deux règles seront exécutées. Assurez-vous également d'exécuter sudo systemctl daemon-reload après avoir enregistré ce fichier. Dans mon cas, l'exécution de pools en tant que root est maintenant autorisée sur Ubuntu 16.04.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X