我试图让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上。