red*_*aap 6 linux root php-fpm init.d php7
我试图让 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 都会失败,我必须运行此命令。
我试图把文件“PHP-fpm7.0”在/etc/default与线DAEMON_ARGS="--daemonize --fpm-config $CONFFILE -R",我甚至尝试添加-R参数的do_start函数/etc/init.d/php7.0-fpm直接,但我不断收到please specify user and group other than root错误。
有什么办法可以让我在启动时和service命令中工作吗?
题外话:我知道所有的风险,我知道为什么我不应该这样做,但我还是想这样做。我需要运行一些脚本来创建目录、执行 chown 命令等,并且池将专用于 nginx 服务器块使用的后端,该后端只能在一个特定的 URL 路径上从私有 192.168.1.X 网络内访问。
作为替代方案,我可以设置一个以 root 身份执行 PHP 脚本的 cron 脚本,但这种方法会花费我更多的时间。
在 systemd 系统上,您可能必须通过 systemd 而不是 system V init 脚本来配置它
以下步骤已在 Ubuntu 16.04 LTS 上测试和运行。这是重定向初始化脚本的罪魁祸首:
/lib/lsb/init-functions.d/40-systemd
Run Code Online (Sandbox Code Playgroud)
1. 编辑您的 php-fpm 池配置,例如/etc/php/7.0/fpm/pool.d/www.conf,将 root 配置为用户/组作为 root
; Unix 用户/进程组 ; 注意:用户是强制性的。如果没有设置组,则默认用户的组 ; 将会被使用。 用户 = 根 组 = 根
2.编辑 /lib/systemd/system/php7.0-fpm.service并将-R附加到ExecStart变量以允许服务以root身份运行
ExecStart=/usr/sbin/php-fpm7.0 --nodaemonize --fpm-config /etc/php/7.0/fpm/php-fpm.conf -R
3.重新加载配置
$ 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:池 www 根 32064 0.0 0.0 221680 4992 ? S 16:59 0:00 php-fpm:池 www
我终于找到了解决办法。事实证明 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.service为您的服务文件的名称。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
Run Code Online (Sandbox Code Playgroud)
就我而言,我需要调整ExecStart规则。我们不必编辑这个文件,因为 systemd 提供了一种覆盖特定规则的方法。该命令sudo systemctl edit php7.0-fpm.service将打开一个编辑器,您可以在其中输入这些规则。只需输入您想要调整的规则部分并保存文件。就我而言,它看起来像这样:
[Service]
ExecStart=
ExecStart=/usr/sbin/php-fpm7.0 --allow-to-run-as-root --nodaemonize --fpm-config /etc/php/7.0/fpm/php-fpm.conf
Run Code Online (Sandbox Code Playgroud)
确保首先重置要编辑的规则,否则两条规则都会被执行。还要确保sudo systemctl daemon-reload保存此文件后运行。就我而言,Ubuntu 16.04 现在允许以 root 身份运行池。
| 归档时间: |
|
| 查看次数: |
16802 次 |
| 最近记录: |