为什么 Apache httpd stop 命令默认不优雅?

为什么 Apache httpd stop 命令默认不优雅?

从 20.04 开始,systemd 服务定义如下apache2focal-updates Launchpad 链接) 用于apachectl stopExecStop。这对应于立即执行的连接中断 TERM 信号,而不是优雅的WINCH关闭信号由...提供apachectl graceful-stop

为什么会这样?在我看来,默认情况下执行正常关闭更明智,尤其是因为同一个 systemd 服务文件指定 ExecReload 进行重启graceful而不是突然重启restart。此外,nginx使用正常关机 QUIT 信号为自己的ExecStop 配置

某些邮件列表中可能确实有关于此决定的记录讨论,但我刚开始探索 Ubuntu 开发社区平台,所以我还不知道在哪里可以找到。(也许这是从 Debian 继承的设计决策,但我也说不准。)

作为次要问题:如果我想更新 Apache(或任何 Ubuntu systemd 服务)的此服务配置,我该如何以安全的“Ubuntu 认可”的方式进行?(即确保它不会被更新等覆盖)

答案1

更新:Debian 错误#974665已解决,因此从 Debian 不稳定版本 2.4.46-2 开始,httpd 现在graceful-stop默认使用。我预计 Ubuntu 将从 21.04 开始继承此更改。


好吧,我已经找到了解决 Ubuntu 和 Debian 开发平台的方法。

Ubuntu 从 Debian 继承了这个 systemd 配置,并且我已经将为 apache2 配置 systemd 的初始工作追溯到 Debian 错误 #798430。在讨论中,最初提议的补丁实际上指定了graceful-stop/ SIGWINCH;然而,最终提交的更改就是我们现在所拥有的,并且没有具体提到为什么最后使用了非优雅命令。我发现了另一个更早的错误报告,#641206,要求对 init.d 进行类似的更改,Debian 维护者回复了,解释了为什么当时不可行。我不确定这是否也适用于 systemd;无论如何,我已经提交了#974665

至于后续关注的问题,似乎可以借助 Debian 来实现‘消遣’dpkg-divert工具更新:虽然“转移”可能有效,但覆盖 systemd 配置的更简单、更常规的方法是使用systemctl edit;参见关于覆盖 systemd 服务的答案

相关内容