我总是使用以下命令:
shutdown -r now
然而,有时这会导致 MySQL 问题。
重启 CentOS 最优雅的方法是什么?
我见过:
reboot
和
halt
我怎样才能平稳地重启机器?
答案1
使用 systemd 的系统(CentOS >=7)将具有 、reboot
和shutdown
命令halt
符号链接systemctl
以处理重启。 systemctl 程序将检测符号链接的使用情况并使用相应的参数运行 systemctl 命令。有关命令之间的差异,请参阅 systemctl 的手册页(man systemctl
),因为它有相当详细的文档。
对于 CentOS 6,没有比使用原始问题中所述的任何命令更好的方法来重新启动服务器:
- 关闭是停止系统的最常用方法。添加参数
-r
和特定时间(或“now
”)将重新启动系统,而不是在关机序列后停止系统。 - 重启是一个关闭包装器,它会执行一些硬盘维护(同步和/或处于待机模式,但并不真正相关)。
- 如果不在运行级别 0 或 6,
reboot
则将启动新版本(>2.74)。shutdown
- 大多数初始化脚本调用停登录韓國。
现代发行版将涵盖所有任务,无论您使用什么命令。基本上,它们都启动您的关机运行时系统安全(CentOS <7)或systemd(CentOS >=7)脚本(为了便于阅读,我将它们称为 init 脚本)。
使用初始化脚本逐步关闭通常注册的所有服务运行级别'S'。单个 init 脚本可以有超时,例如 CentOS 中的 MySQL init 脚本。当给出停止参数并且守护进程在相当长的时间内不会关闭时,脚本将停止并退出并出现故障。关闭过程将继续,好像什么都没有发生,只是需要更长的时间并且可能会打印警告。最后,当所有 init 脚本都执行完毕时,不可避免的事情将会发生:所有仍在运行的进程将得到一个SIGTERM
信号几秒钟后(2 秒或 5 秒),a SIGKILL
。这将在交流电源接口调用此命令实际上是为了真正地重新启动或关闭系统。
一个例外是使用reboot
带有-f
选项的命令,这将跳过执行初始化脚本并直接重新启动系统。
您最好解决担心的根本原因:MySQL 无法正常关闭。
这通常是因为在守护进程可以安全退出之前需要完成大量工作。我曾经有一个包含 +300.000 个表的 MySQL 实例,它花了一个多小时才退出。使用巨大缓冲区和稀疏 I/O 可用性的系统也会出现类似的问题。
答案2
应使用以下命令以 root 身份正常关闭 Centos 6.x:
shutdown -h now
这将尝试在正常关闭服务器之前停止所有正在运行的服务。
使用此命令还可以防止 mySQL 套接字问题。
同样,为了正常重启:
reboot -h now
您可以在此处阅读有关类似问题的先前回答:
答案3
我使用命令“init 6”。
init 6 告诉 init 进程关闭 init 文件中写的所有生成的进程/守护进程(按照它们启动的相反顺序),最后调用 shutdown -r now 命令重新启动机器。
更多信息请见关于这个问题。
答案4
我感觉你可能不喜欢这个答案,但是这个答案包含了一些其他人都没有考虑到的见解。。。你写道:
我总是使用以下命令:
关机-r现在
然而,有时这会导致 MySQL 问题。
这里的问题不是您的关机方法,而是软件不能正确处理关机;MySql。
真正解决此问题的唯一方法是替换 MySql(PostgreSql 是一个很好的替代品)或者编写自己的关机脚本,首先像婴儿一样宠爱 MySql,当它愿意关闭时再关闭系统。
... 作为一名在数据库系统领域深耕 26 年的人,我可以告诉你,直到最近,MySql 才开始在数据库系统最重要的方面——数据安全性/完整性——的能力上有所作为。以前,他们较少关注这些方面,而更关注性能。但是,如果丢失数据,再好的性能又有什么用呢?在某些应用程序上,比如 Netflix 流媒体视频录制,记录你正在观看的点,绝对保真度可能并不是特别重要——甚至可能,你的客户喜欢视频在发生故障后稍微备份。但在银行系统中,这是一场史诗般的灾难。只有数据所有者才知道什么对他们来说是正确的。