正常重启CentOS的最佳方法?


81

我一直使用以下命令:

shutdown -r now

但是,有时会导致MySQL问题。

重新启动CentOS的最优雅的方法是什么?

我见过:

reboot

halt

如何轻轻重启机器?


3
reboot本质上是shutdown -r...所以... 的别名。
内森·C

我的帖子回答了您的问题,还是您需要了解其他内容?
乔佛里

目前无法在此处发表评论,但我想在此处发出有关重启的警告。如果该实例位于Amazon EC2上,则现在执行reboot -h将对实例进行实例化,因此请勿执行此操作。相反,如果您必须关闭或重新引导,请通过Amazon的在线界面(而不是外壳程序)进行操作。如果您对实例进行砌块,则可以停止它,分离卷,创建一个单独的实例并将该卷附加到该实例,而无需分离新实例随附的第一个卷。然后,您需要ssh进入新实例,挂载旧卷,并从中取出文件。
kloddant

实际上,您要在运行sync: sync;之前运行,shutdown -r以便所有文件I / O都将同步。我怀疑这也会解决以下问题:mysql
user3629249 '17

Answers:


92

除了使用这些命令,没有比使用其他任何方法更好的重启服务器的方法了。

  • 关闭是停止系统的最常见方法。添加参数-r和特定时间(或' now')将重新启动系统,而不是在关闭序列后将其暂停。
  • 重新启动是包装器一次关闭,它会执行一些硬盘维护(同步和/或置于待机模式,但实际上并不相关)。
  • 如果不在运行级别0或6中,reboot则将启动新版本(> 2.74)shutdown
  • 大多数初始化脚本都调用halt来登录utmp

无论您使用什么命令,现代发行版都将涵盖所有任务。基本上,它们都会启动SysV(CentOS <7)或systemd(CentOS> = 7)脚本的关闭运行时(为便于阅读,我将它们称为init脚本)。

使用初始化脚本逐步关闭,可以停止通常在运行级别 'S' 下注册的所有服务。个别的初始化脚本可能会有超时,例如CentOS中的MySQL初始化脚本。当给出stop参数并且守护程序在相当长的时间内不会关闭时,脚本将停止并退出并给出失败信息。关闭过程将继续进行,就好像什么都没错,只需要更长的时间,并且可能会显示警告。最后,当所有初始化脚本都执行完后,不可避免的事情发生了:所有仍在运行的进程将收到一个SIGTERM 信号,并在几秒钟(2或5)后得到一个信号SIGKILL。在完成ACPI调用以真正重新引导或关闭系统之前,这将清除其余部分。

一个例外是使用reboot带有该-f选项的命令,这将跳过执行初始化脚本并直接重新引导系统。

最好解决您的担心的根本原因:MySQL无法正确关闭。

通常这是由于在安全退出守护程序之前需要完成大量工作。我曾经有一个带有+300.000表的MySQL实例,该过程花了一个多小时才退出。对于使用大量缓冲区和稀疏I / O可用性的系统,也会发现类似的问题。


31

可以通过以超级用户身份使用命令来正常关闭Centos 6.x:

shutdown -h now

这将尝试在正常关闭服务器之前停止所有正在运行的服务。

使用此命令还可以防止mySQL套接字问题。

同样,要正常重启,请执行以下操作:

reboot -h now

您可以在此处阅读有关类似问题的先前答案:

https://stackoverflow.com/questions/20407292/centos-another-mysql-daemon-already-running-with-the-same-unix-socket


7
我想你的意思是shutdown -r now,也许只是reboot。该reboot命令没有-h选项。
迈克尔·汉普顿

1
Michael,您好,Centos 6.x确实可以选择在重新启动之前暂停服务。“ shutdown -h now”是正常关闭,“ reboot -h now”是正常重启。在您的Centos服务器上尝试...
GeckoSEO 2014年

1
哦?这个-h选项有什么作用?它不在手册页中。
迈克尔·汉普顿

2
真?您是否有一些文档?因为,第一,这就是reboot -h。第二,据我所知,根本没有那样记录。
迈克尔·汉普顿

2
您刚刚链接的文档说明了我一直在告诉您的内容!reboot没有-h选择,shutdown没有。
迈克尔·汉普顿

2

在向最终用户和客户提供远程指导时,我指示他们使用poweroff以关闭系统并关闭电源。

如果他们想要热重启,我建议他们使用reboot命令。

我想可以说发行Ctrl-Alt-Delete也可以做到这一点;)


我不同意这个答复。重新启动和关闭(Ctrl-Alt-Delete)是强制性的,并且在某些环境(例如运行mySQL的环境)中可能会导致套接字“锁定”,然后需要创建新的套接字,或者在重新创建新的套接字之前删除/移动现有的套接字一。
GeckoSEO 2014年

1
@GeckoSEO这是一个有趣的建议,指的是允许在Linux服务器上启用Ctrl-Alt-Delete危险
ewwhite 2014年

另一方面,我的回答并不刻薄,我只是想为那些试图解决这个问题的人澄清答案。请查看我之前的答案,希望对您有所帮助。
GeckoSEO 2014年

2

我使用命令'init 6'。

init 6告诉init进程关闭init文件中写入的所有生成的进程/守护程序(以它们启动时的相反顺序),最后调用shutdown -r now命令重新引导计算机。

有关此问题的更多信息,请参见。


0

我觉得您可能不喜欢此答案,但是此答案包含一些其他人都没有考虑的见解。。。你写:

我一直使用以下命令:

立即关闭-r

但是,有时会导致MySQL问题。

这里的问题不是您的关机方法,而是无法正确处理关机的软件;MySQL的。

真正解决此问题的唯一方法是替换MySql(PostgreSql是一个很好的替代方法),或者编写自己的关闭脚本,让FIRST像婴儿一样拥抱MySql,然后在很高兴被关闭时关闭系统。

...作为一个从事数据库系统工作超过26年的人,我可以告诉您,直到最近,MySql才开始在有关数据库系统最重要方面的能力方面采取行动。对于-数据安全性/完整性。以前,他们很少关注这些方面,而更多地关注性能。但是,如果丢失数据,那么出色的性能有什么好处呢?在某些应用程序上,例如Netflix在您正在观看的点上流式传输视频记录时,绝对保真度并不是特别重要-甚至,即使您的客户也喜欢在发生故障后备份视频。但是在银行系统中,这是史诗般的灾难。只有数据所有者才能知道什么是适合他们的。


1
仅仅因为重启或关闭系统问题而替换mysql?解决方案的最后一部分对解决提出问题的人的问题没有任何帮助
ftrujillo

这个答案偏向于没有资料或参考的mysql。在问题的上下文中没有用;任何退出时间过长的软件都可能在重新引导时引起问题(尤其是systemd及其激进的超时)。
哈拉尔德
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.