当前位置: 首页>>技术问答>>正文


“service restart”和“service reload”有什么区别

, , ,

问题描述

我试图了解service restart [someservice]service reload [someservice]之间的区别。我知道”restart”重新启动服务,而”reload”重新加载配置,但我不能理解这个的实际意义,以确定我应该在给定的上下文中使用哪个。

一个例子:我读过设置PostgreSQL的大多数指南都说,一旦我编辑了postgresql.conf和pg_hba.conf以允许远程连接,我就应该发出sudo service postgresql restart。但是,如果我根据上面的描述猜测要使用哪个,我会选择”reload”。

如果它很重要,我在Ubuntu 11.10上 – 尽管我希望尽可能普遍适用一个解释。

最佳解决思路

您所说的是正确的,reload告诉服务重新加载其配置文件。这意味着重新加载配置应该足够了;但是,某些服务可能“不遵循规则”或不会重新加载配置文件。因此,您可能更安全地使用restart。我个人不使用postgresql,所以我不知道。

次佳解决思路

  • restart =停止+开始

  • reload =保持运行+ re-read配置文件。

第三种解决思路

并非所有服务都支持reload。对于那些那样做,通常最好重新启动(即重新加载导致更少或没有停机时间)。

The Debian Policy Manual specifies,每个/etc/init.d/脚本应支持force-reload操作,如果服务支持reload,则表示reload;如果服务不支持重新加载,则表示restart

我不确定这是如何转化为现代Ubuntu新贵世界的。

第四种思路

根据我对systemd的经验扩展عبد النور التومي答案。

在systemd中,每当进程启动时,它都在systemd上下文中运行,最明显的例子是在其单元文件中定义的环境变量。

因此,当您发送systemctl reload [someservice]信号时,它会向服务发送一个信号,以便在支持时正常重新加载。如果不是,该过程将简单地忽略该信号。这是可配置的。

我优雅地说什么?使用新配置或代码启动新工作人员,并在他们完成当前请求(如果有)时停止旧工作人员。

如果您创建systemctl restart [someservice],它将告诉systemctl告诉服务停止,销毁当前systemd上下文,创建一个新服务并再次运行该服务。例如,在系统上下文中重新加载环境变量或者不支持重新加载时,这是有意义的。

希望这澄清一点,如果我错了,请告诉我。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1285.html,未经允许,请勿转载。