GNU/Linux >> Linux Esercitazione >  >> Linux

Avvia automaticamente PHP-FPM con l'opzione root

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.


Linux
  1. Disabilita l'accesso con l'account root

  2. Avvia automaticamente il servizio OpenCA tramite Systemd in CentOS 7

  3. Avvia Tomcat all'avvio con privilegi amministrativi?

  4. Il servizio Systemd non avvia Nodejs?

  5. Ora di inizio del processo con fuso orario?

Come avviare, arrestare o riavviare Apache

Come avviare, arrestare o riavviare Nginx

Utilizzo di PHP-FPM con Apache su Ubuntu 16.04

Gestire cgroup con systemd

Iniziare con systemctl

Come configurare PHP-FPM con NGINX