GNU/Linux >> Znalost Linux >  >> Linux

Spusťte PHP-FPM s možností root automaticky

V systémech systemd to možná budete muset nakonfigurovat pomocí iniciačních skriptů systemd, nikoli system V

Níže uvedené kroky jsou testovány a fungují na Ubuntu 16.04 LTS. A toto je váš viník za přesměrované init skripty:

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

1. Upravit konfigurace vašeho fondu php-fpm, např. /etc/php/7.0/fpm/pool.d/www.conf a nakonfigurujte root jako uživatele/skupinu jako 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. Upravit /lib/systemd/system/php7.0-fpm.service a připojte -R k ExecStart proměnná, aby služba běžela jako root

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

3. Znovu načtěte konfiguraci

$ systemctl daemon-reload

4. Spusťte službu

$ systemctl start php7.0-fpm

5. Podívejte se na to

$ 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

Konečně jsem našel řešení. Ukázalo se, že Ubuntu používá systemd spustit a restartovat PHP-FPM, a proto ignoroval init.d soubory.

Pokud máte problémy s úpravami init.d soubory jsou ignorovány a vy používáte Ubuntu 15.04 nebo novější, velká šance, že služba má systemd servisní soubor také.

Takže oprava mého problému:Můj systém má soubor s názvem /lib/systemd/system/php7.0-fpm.service , který používá systemd . Pomocí příkazu cat /lib/systemd/system/php7.0-fpm.service můžete vidět obsah souboru služby. Nahradíte php7.0-fpm.service s názvem vašeho servisního souboru. Servisní soubor PHP7.0-FPM vypadá takto:

[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

V mém případě jsem potřeboval upravit ExecStart pravidlo. Tento soubor nemusíme upravovat, protože systemd nabízí způsob, jak přepsat konkrétní pravidla. Příkaz sudo systemctl edit php7.0-fpm.service otevře editor, do kterého můžete zadat tato pravidla. Stačí zadat oddíl(y) pravidel, které chcete upravit, a soubor uložit. V mém případě to vypadá takto:

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

Nezapomeňte nejprve resetovat pravidlo, které chcete upravit, jinak budou provedena obě pravidla. Nezapomeňte také spustit sudo systemctl daemon-reload po uložení tohoto souboru. V mém případě je nyní na Ubuntu 16.04 povoleno spouštění fondů jako root.


Linux
  1. Zakažte přihlášení pomocí účtu root

  2. Firewalld se na CentOS 8 s DBusException nespustí

  3. Spustit Tomcat při spuštění s administrátorskými oprávněními?

  1. Jak spustit službu NTP s povoleným otáčením v systému Linux

  2. Jak nastavit ssh bez hesla pomocí klíčů RSA

  3. Konfigurace služby Systemd pro spuštění s přístupem root

  1. Spravujte více instancí služeb pomocí systemctl

  2. Začínáme s ls

  3. Automaticky spusťte službu OpenCA přes Systemd v CentOS 7