优雅地重启 CentOS 的最佳方式?

Use*_*ser 101 centos shutdown

我一直使用命令:

shutdown -r now
Run Code Online (Sandbox Code Playgroud)

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

重启 CentOS 最优雅的方式是什么?

我见过:

reboot
Run Code Online (Sandbox Code Playgroud)

halt
Run Code Online (Sandbox Code Playgroud)

如何轻轻重启机器?

Jof*_*rey 112

除了使用这些命令之外,没有更好的方法来重新启动服务器。

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

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

使用 init 脚本逐步关闭,停止在通常运行级别“S”下注册的所有服务。个别的 init 脚本可以有一个超时,就像 CentOS 中的 MySQL init 脚本。当给出 stop 参数并且守护进程不会在相当长的时间内关闭时,脚本将停止并退出并给出失败。关机过程将继续,好像没有任何问题,只是需要更长的时间,并且可能会打印警告。最后,当所有 init 脚本被执行时,不可避免的会发生:所有仍在运行的进程都会收到一个SIGTERM 信号,几秒钟(2 或 5 秒)后,一个SIGKILL. 这将在执行ACPI调用以真正重新启动或关闭系统之前清理其余部分。

一个例外是使用reboot带有-f选项的命令,这将跳过执行 init 脚本并直接重新启动系统。

你最好解决你担心的根本原因:MySQL 没有正确关闭。

这通常是由于在守护进程可以安全退出之前需要完成大量工作。我曾经有一个包含 +300.000 个表的 MySQL 实例,需要一个多小时才能退出。使用巨大缓冲区和稀疏 I/O 可用性的系统也存在类似问题。


小智 42

Centos 6.x 的正常关闭应该以 root 身份使用以下命令完成:

shutdown -h now
Run Code Online (Sandbox Code Playgroud)

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

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

同样,对于正常重启:

reboot -h now
Run Code Online (Sandbox Code Playgroud)

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

/sf/ask/1428510471/

  • 我认为您的意思是“shutdown -r now”,或者只是“rebo​​ot”。`reboot` 命令没有 `-h` 选项。 (8认同)
  • 真的吗?你有这方面的文件吗?因为,首先,这就是 `reboot` _without_ `-h` 所做的。其次,据我所知,它根本没有记录在案。 (2认同)
  • 您刚刚链接的文档完全说明了我一直在告诉您的内容!`reboot` 没有 `-h` 选项,`shutdown` 有。 (2认同)
  • -1 第二个示例中未更正的错误。第一个示例中可能的错误:问题是关于重新启动,而 -h 不这样做。 (2认同)