【问题标题】:Allow users to reload PHP FPM without Sudo允许用户在没有 Sudo 的情况下重新加载 PHP FPM
【发布时间】:2017-04-10 18:56:35
【问题描述】:

在我们的开发服务器上,我们允许多个开发人员访问服务器以git pull 他们的更改。通常这需要运行sudo systemctl reload php-fpm(或发送USR2等)。但是,我们希望允许他们在不需要sudo 的情况下重新加载 PHP-FPM 中更改的代码。

当我过去使用 Ruby 时,您可以通过 touchtmp 目录中创建一个名为 restart.txt 的文件来完成我正在寻找的事情。

PHP-FPM 是否支持类似的东西?或者,是否允许在没有sudo 的情况下使用reload 命令(或任何类似的发送USR2 的方法)?

【问题讨论】:

  • 为什么git pull之后需要重启/重新加载php-fpm
  • 您可以使用 ruby​​ 实现相同的功能。我仍然不知道为什么你在 git pull 之后重新加载 FPM,这不是必需的,你对 php 文件的更改无论如何都会被执行。但是,为避免进一步讨论:superuser.com/questions/181517/… - 在那里,根据您的需要进行调整。
  • @N.B.因为我们关闭了opcache.validate_timestamps 进行性能测试和基准测试(以及在生产中,尽管这与这个问题无关),并且清除 OpCache 的最简单方法是重新加载。

标签: php sudo fpm


【解决方案1】:

您可能会在 /etc/sudoers 文件中将命令列入白名单时出现:

首先编辑 sudoers 文件:

sudo visudo

添加以下配置行:

user ALL=(root) NOPASSWD: systemctl reload php-fpm

user(在行首)替换为执行命令的真实用户名。

这将授予用户调用sudo systemctl reload php-fpm 的权限,以root 身份(无密码)执行。

【讨论】:

  • 注意在编辑 sudoers 文件时始终使用visudo,并且第一个user 需要是实际用户名。
  • 注意,你必须在运行命令前加上 sudo。以用户su user 登录,然后:sudo systemctl reload php-fpm
  • 花了一些时间,visudo 说格式无效,直到我将user ALL=(root) NOPASSWD: /bin/systemctl reload php-fpm 完整路径放入可执行命令。然后它起作用了。 Debian 9
【解决方案2】:

或者可以使用:

user ALL=(ALL) NOPASSWD: /usr/sbin/service php7.3-fpm *

7.3 的位置可能会根据您拥有的 php 版本而改变,user 是您的用户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多