“服务重新启动”和“服务重新加载”有什么区别


73

我试图理解之间的差异service restart [someservice]service reload [someservice]。我知道“重新启动”会重新启动服务,而“重新加载”会重新加载配置,但是我不太了解此操作的实际含义,无法确定在给定上下文中应该使用哪个。

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

万一重要,我使用的是Ubuntu 11.10-尽管我希望能提供尽可能适用的解释。


2
几年前,我正在运行一个拥有数千名用户的服务器。由于某种原因,重启Apache的速度并不快,大约需要3分钟来重启apache(原因)。无论如何,如果服务器宕机3分钟,我的老板将接到大约800个电话。重新加载服务后,将有0个电话。那就是区别。
j0h

Answers:


41

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


1
与此同时,有reload-or-restart
Suuuehgi

对于PostgreSQL,您可以通过重新加载将更改应用于/etc/postgresql/version/main/postgresql.conf。将更改应用于pg_hba.conf需要重新启动。
艾丹·梅伦


8

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

Debian策略手册指定每个/etc/init.d/脚本都应支持一个force-reload动作,这意味着reload该服务是否支持该动作,以及restart该服务是否不支持重新加载。

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


1
Debian政策手册是非常有用的链接,谢谢。
不是补丁

1
大多数支持重新加载,如果不通过系统服务,则认为/etc/init.d/SomeProgram重新加载
j0h 2016年

4

用我在systemd上的经验来扩展عبدالنورالتومي答案。

在systemd中,无论何时启动进程,它都在systemd上下文中运行,最清楚的例子是在其单元文件中定义的环境变量。

因此,当您发送systemctl reload [someservice]信号时,它会向服务发送信号,以在支持的情况下优雅地重新加载自身。如果不是,则该过程将简单地忽略该信号。不过,这是可配置的。

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

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

希望这可以澄清一点,如果我在某些方面有误,请告诉我。


0

当前,如果服务需要启动(例如更改配置文件),您可以通知服务,但这会导致重新启动。如果服务已经在运行,那么如果重新加载完成就很好了(尽管我想必定会有一些服务需要重新启动某些文件,而需要重新加载其他文件)。

我能想到的最复杂的例子是Apache。通常,您可以要求它重新加载,但是有时您需要请求重新启动(例如,如果添加/删除模块)。


0

postgres是重新加载和重新启动之间存在巨大差异的一个很好的例子,因为后者必须断开所有数据库客户端的连接。

当连接不应该回滚时,可以首先使用pg_ctlcluster停止服务,而无需使用“ --force” 。

/etc/postgres/{version}/{dbname}/postgresql.confhttp://www.postgresql.org/docs/manuals/中,每个参数都有一个注释,例如“此参数只能在服务器启动时设置。 ”

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.