Sui sistemi systemd, potrebbe essere necessario configurarlo tramite systemd piuttosto che tramite gli script init V di sistema
I passaggi seguenti sono testati e funzionano su Ubuntu 16.04 LTS. E questo è il tuo colpevole per gli script init reindirizzati:
/lib/lsb/init-functions.d/40-systemd
1. Modifica la configurazione del pool php-fpm, ad es. /etc/php/7.0/fpm/pool.d/www.conf
e configurare root come utente/gruppo come 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. Modifica /lib/systemd/system/php7.0-fpm.service
e aggiungi -R al ExecStart
variabile per consentire l'esecuzione del servizio come root
ExecStart=/usr/sbin/php-fpm7.0 --nodaemonize --fpm-config /etc/php/7.0/fpm/php-fpm.conf -R
3. Ricarica la configurazione
$ systemctl daemon-reload
4. Avvia il servizio
$ systemctl start php7.0-fpm
5. Dai un'occhiata
$ 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
Finalmente ho trovato una soluzione. Si è scoperto che Ubuntu stava usando systemd
per avviare e riavviare PHP-FPM e quindi ignorava il init.d
file.
Se riscontri problemi con le modifiche a init.d
i file vengono ignorati e sei su Ubuntu 15.04 o successivo, grande possibilità che il servizio abbia un systemd
anche il file di servizio.
Quindi la soluzione al mio problema:il mio sistema ha un file chiamato /lib/systemd/system/php7.0-fpm.service
, utilizzato da systemd
. Con il comando cat /lib/systemd/system/php7.0-fpm.service
puoi vedere il contenuto del file di servizio. Sostituisci php7.0-fpm.service
con il nome del tuo file di servizio. Il file di servizio di PHP7.0-FPM ha questo aspetto:
[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
Nel mio caso ho dovuto regolare il ExecStart
regola. Non dobbiamo modificare questo file, perché systemd offre un modo per ignorare regole specifiche. Il comando sudo systemctl edit php7.0-fpm.service
aprirà un editor in cui puoi inserire quelle regole. Basta inserire la/e sezione/i della/e regola/e che si desidera modificare e salvare il file. Nel mio caso è simile a questo:
[Service]
ExecStart=
ExecStart=/usr/sbin/php-fpm7.0 --allow-to-run-as-root --nodaemonize --fpm-config /etc/php/7.0/fpm/php-fpm.conf
Assicurati di reimpostare prima la regola che desideri modificare, altrimenti entrambe le regole verranno eseguite. Assicurati anche di eseguire sudo systemctl daemon-reload
dopo aver salvato questo file. Nel mio caso l'esecuzione di pool come root è ora consentita su Ubuntu 16.04.