GNU/Linux >> Tutoriels Linux >  >> Linux

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

Sur les systèmes systemd, vous devrez peut-être configurer cela via systemd plutôt que les scripts d'initialisation du système V

Les étapes ci-dessous sont testées et fonctionnent sur Ubuntu 16.04 LTS. Et voici votre coupable pour les scripts d'initialisation redirigés :

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

1. Modifier la configuration de votre pool php-fpm, par ex. /etc/php/7.0/fpm/pool.d/www.conf et configurez root en tant qu'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 au ExecStart variable pour permettre au service de s'exécuter en tant que root

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

3. Recharger la configuration

$ systemctl daemon-reload

4. Démarrer le service

$ systemctl start php7.0-fpm

5. Vérifiez-le

$ 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

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

Si vous rencontrez des problèmes avec les ajustements de init.d les fichiers étant ignorés et que vous êtes sur Ubuntu 15.04 ou version ultérieure, il y a de fortes chances que le service ait un systemd fichier de service également.

Donc, le correctif pour 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'avais besoin d'ajuster le ExecStart régner. Nous n'avons pas besoin de modifier ce fichier, car systemd offre un moyen de remplacer des règles spécifiques. La commande sudo systemctl edit php7.0-fpm.service ouvrira un éditeur dans lequel vous pourrez saisir ces règles. Entrez simplement la ou les sections de la ou des règles que vous souhaitez modifier et enregistrez 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

Assurez-vous de réinitialiser la règle que vous souhaitez modifier en premier, 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 désormais autorisée sur Ubuntu 16.04.


Linux
  1. Gérer plusieurs instances de service avec systemctl

  2. Démarrer avec ls

  3. Démarrer automatiquement le service OpenCA via Systemd dans CentOS 7

  4. Comment démarrer le service NTP avec Slewing activé sous Linux

  5. Configuration du service Systemd pour qu'il s'exécute avec un accès root

Comment démarrer, arrêter ou redémarrer Apache

Comment démarrer, arrêter ou redémarrer Nginx

Utilisation de PHP-FPM avec Apache sur Ubuntu 16.04

Gestion des cgroups avec systemd

Premiers pas avec systemctl

Comment configurer PHP-FPM avec NGINX