使用root选项自动启动PHP-FPM

我试图让PHP-FPM以root身份运行一个池,但似乎无法调整init.d启动参数。

它从CLI启动PHP-FPM(使用sudo php-fpm7.0 -DRy /etc/php/7.0/fpm/php-fpm.conf ,但是我不能得到这个与service命令( sudo service php7.0-fpm (re)start 。所以每当服务器重新启动,PHP-FPM失败,我将不得不运行此命令。

我已经尝试在/etc/default中将DAEMON_ARGS="--daemonize --fpm-config $CONFFILE -R"放入一个文件“php-fpm7.0 DAEMON_ARGS="--daemonize --fpm-config $CONFFILE -R" ,我甚至尝试将-R参数添加到直接在/etc/init.d/php7.0-fpm do_start函数,但是我一直在得到please specify user and group other than root错误please specify user and group other than root

有什么办法,我可以得到这个启动和service命令工作?


离题:我知道所有的风险,我知道为什么我不应该这样做,但是我想要。 我需要运行一些脚本来创build目录,执行chown命令等,池将专用于一个nginx服务器模块使用的后端,该模块只能在一个特定的URLpath上从私有192.168.1.Xnetworking访问。

作为替代,我可以设置一个cron脚本来执行一个PHP脚本作为根,但是这种方法会花费我更多的时间。

在systemd系统上,您可能需要通过systemd而不是系统V init脚本进行configuration

以下步骤经过testing,并在Ubuntu 16.04 LTS上运行。 这是你redirect的init脚本的罪魁祸首:

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

1.编辑你的php-fpm池configuration,例如/etc/php/7.0/fpm/pool.d/www.conf并将rootconfiguration成用户/组作为root

 ;  Unix用户/进程组
 ; 注意:用户是强制性的。 如果该组未设置,则为默认的用户组
 ; 将会被使用。
 user = root
 group = root

2.编辑 /lib/systemd/system/php7.0-fpm.service并将-R附加到ExecStartvariables,以允许服务作为根运行

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

3.重新加载configuration

 $ systemctl守护进程重新加载

4.开始服务

 $ systemctl启动php7.0-fpm

5.检查出来

 $ ps auwx |  grep的PHP
根32061 0.0 0.0 221680 26084?  Ss 16:59 0:00 php-fpm:主进程(/etc/php/7.0/fpm/php-fpm.conf)
根32063 0.0 0.0 221680 4992?  S 16:59 0:00 php-fpm:pool www
根32064 0.0 0.0 221680 4992?  S 16:59 0:00 php-fpm:pool www

我终于find了解决办法。 事实certificate,Ubuntu使用systemd启动并重新启动PHP-FPM,因此忽略了init.d文件。

如果您在调整init.d文件时遇到问题而被忽略,并且您使用的是Ubuntu 15.04或更高版本,那么该服务也有一个systemd服务文件的可能性很大。


所以解决我的问题:我的系统有一个名为/lib/systemd/system/php7.0-fpm.service ,由systemd使用的文件。 使用命令cat /lib/systemd/system/php7.0-fpm.service您可以看到服务文件的内容。 您将php7.0-fpm.servicereplace为您的服务文件的名称。 PHP7.0-FPM的服务文件如下所示:

 [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 

在我的情况下,我需要调整ExecStart规则。 我们不必编辑这个文件,因为systemd提供了一种覆盖特定规则的方法。 命令sudo systemctl edit php7.0-fpm.service将打开一个编辑器,您可以在其中input这些规则。 只需input您要调整的规则的部分并保存该文件即可。 在我的情况下,它看起来像这样:

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

确保首先重置您想要编辑的规则,否则这两个规则将被执行。 另外请确保在保存此文件后运行sudo systemctl daemon-reload 。 在我的情况下,以root身份运行池现在被允许在Ubuntu 16.04上。