没有比使用任何其他命令更好的方法来重新启动服务器.
> shutdown是停止系统的最常用方法.
> reboot是一个封装器循环关闭,它执行一些硬盘维护(同步和/或进入待机模式并且不相关).
>如果不是在运行级别0或6中,则新版本的reboot(> 2.74)将启动关闭.
>大多数init脚本调用halt在utmp中生成日志.
无论您使用何种命令,现代发行版都将涵盖所有任务.基本上它们都会启动SysV(CentOS< 7)或systemd(CentOS> = 7)脚本的关闭运行时(为了便于阅读,我将它们称为init脚本).
使用init脚本逐步关闭会停止通常在runlevel‘S’下注册的所有服务.单个init脚本可能会超时,就像CentOS中的MysqL init脚本一样.当给出stop参数并且守护程序不会在相当长的时间内关闭时,脚本将停止并退出,从而导致失败.关机过程将继续进行,好像没有任何问题,只需要更长时间,可能会打印警告.最后,当所有初始化脚本都被执行时,将不可避免地发生:所有仍在运行的进程将获得SIGTERM signal,并在几秒钟(2或5)之后获得SIGKILL.这将在ACPI调用完成之前清理其余部分以真正重启或关闭系统.
一个例外是使用带有-f选项的reboot命令,这将跳过执行init脚本并直接重启系统.
这通常是由于在守护程序安全退出之前需要完成的大量工作.我曾经有一个带有300.000个表的MysqL实例,需要一个多小时才能退出.使用大缓冲区和稀疏I / O可用性的系统可以找到类似的问题.