GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Starten Sie PHP-FPM automatisch mit der Root-Option

Auf systemd-Systemen müssen Sie dies möglicherweise über systemd statt über System-V-Init-Skripte konfigurieren

Die folgenden Schritte wurden getestet und funktionieren unter Ubuntu 16.04 LTS. Und das ist Ihr Übeltäter für umgeleitete Init-Skripte:

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

1. Bearbeiten Ihre php-fpm-Pool-Konfiguration, z. /etc/php/7.0/fpm/pool.d/www.conf und konfigurieren Sie root als Benutzer/Gruppe als 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. Bearbeiten /lib/systemd/system/php7.0-fpm.service und hängen Sie -R an ExecStart an Variable, damit der Dienst als root ausgeführt werden kann

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

3. Konfiguration neu laden

$ systemctl daemon-reload

4. Starten Sie den Dienst

$ systemctl start php7.0-fpm

5. Probieren Sie es aus

$ 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

Endlich habe ich eine Lösung gefunden. Es stellte sich heraus, dass Ubuntu systemd verwendete zum Starten und Neustarten von PHP-FPM und ignorierte dafür den init.d Dateien.

Wenn Sie Probleme mit Anpassungen an init.d haben Dateien ignoriert werden und Sie Ubuntu 15.04 oder höher verwenden, ist die Wahrscheinlichkeit groß, dass der Dienst einen systemd hat Servicedatei ebenfalls.

Also die Lösung für mein Problem:Mein System hat eine Datei namens /lib/systemd/system/php7.0-fpm.service , das von systemd verwendet wird . Mit dem Befehl cat /lib/systemd/system/php7.0-fpm.service Sie können den Inhalt der Servicedatei sehen. Sie ersetzen php7.0-fpm.service mit dem Namen Ihrer Servicedatei. Die Servicedatei von PHP7.0-FPM sieht so aus:

[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

In meinem Fall musste ich den ExecStart anpassen Regel. Wir müssen diese Datei nicht bearbeiten, da systemd eine Möglichkeit bietet, bestimmte Regeln außer Kraft zu setzen. Der Befehl sudo systemctl edit php7.0-fpm.service öffnet einen Editor, in dem Sie diese Regeln eingeben können. Geben Sie einfach die Abschnitte der Regel(n) ein, die Sie anpassen möchten, und speichern Sie die Datei. Bei mir sieht das so aus:

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

Stellen Sie sicher, dass Sie zuerst die Regel zurücksetzen, die Sie bearbeiten möchten, da sonst beide Regeln ausgeführt werden. Stellen Sie außerdem sicher, dass Sie sudo systemctl daemon-reload ausführen nach dem Speichern dieser Datei. In meinem Fall ist das Ausführen von Pools als Root jetzt unter Ubuntu 16.04 erlaubt.


Linux
  1. Starten Sie den OpenCA-Dienst automatisch über Systemd in CentOS 7

  2. Firewalld kann unter CentOS 8 mit einer DBusException nicht gestartet werden

  3. Systemd-Dienst startet Nodejs nicht?

  4. PHP-FPM startet nach dem Neustart nicht automatisch

  5. Konfigurieren des Systemd-Dienstes für die Ausführung mit Root-Zugriff

So starten, stoppen oder starten Sie Apache neu

So starten, stoppen oder starten Sie Nginx neu

Verwendung von PHP-FPM mit Apache unter Ubuntu 16.04

Verwalten von cgroups mit systemd

Erste Schritte mit systemctl

So konfigurieren Sie PHP-FPM mit NGINX