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.