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.