Linux的正常关机

本文介绍了在Azure云平台上Linux虚拟机的关机流程。无论是在Azure门户、使用Powershell还是CLI工具,甚至是通过虚拟化管理程序信号,都会触发hv_utils驱动程序,从而启动正常的关机流程。文章详细解释了正常关机的过程,并提供了如何确保应用能够正确关闭的建议。

Azure上的 IaaS 虚拟机可使用多种方式关闭,例如通过 Azure 管理门户、Azure Powershell cmdlet CLI 工具,甚至还可以由交互式登录的用户关闭。Azure 平台本身甚至也能关闭虚拟机以执行平台维护。运行在本地裸机中的Linux 系统的关闭流程很好理解,但是这一切到了云上如何运行呢?

Azure 上启动正常关机

Azure 中关闭 Linux 虚拟机的流程与本地模式基本一样。当用户登录并运行“/sbin/shutdown now”后,正常结果是系统将立即开始停止任何正在运行的服务,并最终关闭整个系统。当然,具体机制在一定程度上取决于使用的Linux 版本和 Init 系统(通常是 SysVUpstart Systemd),但结果是一样的。

然而从门户网站或 Azure 平台启动关机时又会发生什么呢?简单来说,答案会是,会发生几乎相同的事情。在这些情况下,Azure将会与主机通信,启动对来宾 Linux 系统的正常关机。在 Hyper-V Azure 环境下,执行正常关机的信号来自于虚拟化管理程序,由 hv_utils 驱动程序处理。该驱动程序是我们包含在 Linux 内核中的 Linux 集成服务的一部分。该功能称为集成关机

收到虚拟化管理程序的信号后,hv_utils 驱动器将启动 Linux 来宾操作系统的正常关机,所启动机制与用户手动运行“/sbin/shutdown now”基本相同。在 hv_utils 收到虚拟化管理程序发出的信号后,将向日志(通常是 /var/log/messages Ubuntu 系统中的 /var/log/syslog)发送以下信息,表明 Linux 系统已由虚拟化管理程序关闭:

需要注意的是,正常关机过程开始后,Azure 平台不会一直等下去。此平台会留出 5 分钟时间,等待虚拟机正常关机。如果5 分钟过后虚拟机仍在运行,此平台将强制关闭虚拟机。这一点非常重要,一定要确保您的VM 运行的所有脚本都能在既定时间内完成随后彻底关机。

管理关机流程

Azure Linux 用户的一个共同要求是,当 Azure 启动 VM 正常关机时,他们的应用程序能够正常关闭。现在我们已了解手动关机和虚拟化应用程序启动关机使用相同的机制,我们只需使用现有Linux init 系统就能确保应用程序正常关闭。

大多数情况下,现有 SysVSystemd Upstart 脚本将足以正常关闭应用程序。但是在这些脚本尚不足以正常关闭应用程序或需要运行额外流程来清理应用程序时,可以执行以下操作:

  • 当然,最简单的方法就是直接编辑应用程序init 脚本并添加额外的任务。这种做法存在一些弊端:除编辑脚本时可能出现的明显拼写错误和其他错误以外,由于这些脚本通常由RPM Deb 包管理,编辑脚本还可能导致此脚本无法升级。不过这种方式的一个优势是因为集成关机Hyper-V自带的功能,您可以在部署至 Azure 之前在 Hyper-V 上对全部脚本进行本地测试。

  • 另一个方案是创建自己的init 脚本。目前有很多不同的 init 系统可供 Linux 系统使用,所以创建 init 脚本也会有很多方式。大多数系统都至少拥有 SysV 与本机 init 系统的兼容性,所以最简单的做法就是编写 SysV 兼容性脚本,确保它以运行级别 0 运行。

  • 这个方法可能稍微复杂一点。这是我最近在 Azure 库中使用我们的 CentOS 镜像进行测试时使用的一个方法。对于创建自己的 init 脚本执行所需预关机操作而言,此脚本可能是一个很好的起点。但是,别忘了在我们的VM 关闭电源前,我们还有 5 分钟的时间进行清理。

不过就像 Linux 本身一样,这里可能不会有一个适合所有版本和工作负荷的万全之策。重点在于,尽管有很多的解决方法,要在Hyper-V Azure 上彻底关闭我们的 VM,我们需要采取的做法并无特别之处。我们仍然能够使用特定 Linux 版本上的常规程序和机制,同时还能享受将这些系统托管至 Azure 的优势。

 

本文翻译自:

http://azure.microsoft.com/blog/2014/05/06/linux-and-graceful-shutdowns-2/





转载于:https://www.cnblogs.com/sesexxoo/p/6191014.html

<think>好的,我现在要处理用户的问题:“请使用中文回答我或者给我介绍一下: linux命令关机”。首先,我需要回顾之前的对话历史,看看用户之前问了什么,以及我之前是怎么回答的。之前用户询问了如何查看root用户的详细信息,我给出了详细的步骤,包括使用各种命令和文件,还整理了对比表格和注意事项,结构清晰,步骤明确。 现在用户的问题是关于Linux关机命令,这应该属于基础系统管理命令。我需要确保回答的结构和之前的类似,保持一致性,这样用户更容易理解。首先,我要列出所有常用的关机命令,比如shutdown、halt、poweroff、reboot,可能还有init和systemctl,特别是现在很多系统使用systemd。 接下来,我需要详细解释每个命令的用法、选项和示例。比如shutdown命令可以定时关机,还能发送警告信息;halt和poweroff的区别可能在于是否切断电源;reboot虽然用于重启,但也可以用来关机,不过可能不太直观。同时,要提到这些命令需要root权限,通常需要sudo来执行。 还要注意用户可能的场景,比如立即关机、定时关机、重启等,给出对应的命令示例。另外,可能需要解释一些选项,比如-h、-r、-P等,确保用户明白每个参数的作用。对于systemctl,这是systemd系统的命令,现在主流的发行版都在用,所以需要包括进去。 然后,我需要考虑安全性,提醒用户谨慎使用关机命令,特别是在多用户环境中,避免数据丢失。可能还需要提到如何取消已经计划的关机,比如shutdown -c。此外,如果有其他相关命令或工具,比如wall命令发送广播消息,可以在适当的地方提及。 在结构上,应该按照之前的回答模板,分点介绍每个命令,用代码块展示示例,解释每个参数,可能还要有注意事项和总结表格。比如: 1. shutdown命令:最常用,支持定时和消息 2. poweroff/halt:直接关机,区别在于是否断电 3. reboot:重启,但也能关机 4. init和systemctl:系统初始化控制和系统服务管理 需要检查每个命令的语法是否正确,选项是否准确,比如shutdown -h now是否正确。同时,确保使用中文解释,避免技术术语过于晦涩,让新手也能理解。 可能还需要比较不同命令的适用场景,比如在需要广播通知时使用shutdown,而紧急情况下使用poweroff。同时,注意不同发行版之间的差异,比如systemctl在Ubuntu、CentOS等中的使用是否一致。 最后,总结部分可以做一个对比表格,列出命令、作用、常用选项和示例,方便用户快速查阅。注意事项部分要强调权限问题,数据保存的重要性,以及取消关机的方法。 现在需要确保信息准确,比如确认halt是否会完全断电,或者是否有不同的行为。查阅资料确认halt和poweroff的区别:halt是停止系统运行,但可能不切断电源,而poweroff会发送ACPI信号关闭电源。因此,在解释时需要明确区分。 同时,检查是否有其他关机方式,比如使用虚拟机或特定硬件的命令,但可能用户一般不需要,所以可以省略。保持回答简洁但全面,覆盖主要方法即可。 现在组织内容,确保每个命令单独一节,代码示例正确,参数解释清楚。可能还需要指出某些命令的符号链接,比如halt可能是poweroff的链接,具体视系统而定,但用户无需深究,知道功能即可。 最后,检查LaTeX格式是否正确,虽然用户问题中没有数学公式,但系统级指令提到行内公式要用$...$,但这里可能不需要,所以忽略。确保代码块使用反引号,并正确标注shell环境。 完成以上步骤后,整合成一个结构清晰、分点明确的中文回答,符合用户之前获得的回答风格,帮助用户逐步了解不同的关机命令及其用法。</think>在 Linux 系统中,关机操作可通过多种命令实现,具体选择取决于需求(如定时关机、强制关机、重启等)。以下是常用命令及详细说明: --- ### **1. `shutdown` 命令(推荐方式)** **功能**:安全关机或重启,支持定时操作和发送警告消息。 **常用语法**: ```bash sudo shutdown [选项] [时间] [警告消息] ``` **常用选项**: - `-h`:关机(`-H` 为 `halt`,停止系统但不切断电源)。 - `-r`:重启。 - `-c`:取消已计划的关机任务。 - `-P`:彻底切断电源(默认行为,等同于 `poweroff`)。 **示例**: ```bash sudo shutdown -h now # 立即关机 sudo shutdown -r +5 # 5分钟后重启 sudo shutdown -h 22:00 "系统将于22点维护" # 定时关机并广播消息 sudo shutdown -c # 取消计划中的关机 ``` --- ### **2. `poweroff` 命令** **功能**:直接关闭系统并切断电源(依赖 ACPI 支持)。 **语法**: ```bash sudo poweroff ``` **等效命令**: ```bash sudo shutdown -P now # 与 poweroff 效果相同 ``` --- ### **3. `halt` 命令** **功能**:停止系统运行,但不一定切断电源(需结合选项)。 **语法**: ```bash sudo halt # 停止系统,保留电源(需手动断电) sudo halt -p # 停止系统后切断电源(等同于 poweroff) ``` --- ### **4. `reboot` 命令** **功能**:重启系统,但也可用于关机(需结合选项)。 **语法**: ```bash sudo reboot # 立即重启 sudo reboot -f # 强制重启(跳过正常关闭流程) sudo reboot -p # 关机(部分系统支持) ``` --- ### **5. `init` 命令(传统 SysV Init 系统)** **功能**:通过切换运行级别控制系统状态。 **常用运行级别**: - `0`:关机 - `6`:重启 **语法**: ```bash sudo init 0 # 关机 sudo init 6 # 重启 ``` --- ### **6. `systemctl` 命令(Systemd 系统)** **功能**:管理系统电源操作(适用于现代 Linux 发行版)。 **语法**: ```bash sudo systemctl poweroff # 关机 sudo systemctl reboot # 重启 sudo systemctl halt # 停止系统(不切断电源) sudo systemctl suspend # 挂起(睡眠模式) ``` --- ### **总结:命令对比表** | **命令** | **作用** | **常用示例** | **适用场景** | |-------------------|------------------------|--------------------------|--------------------------| | `shutdown` | 安全关机/重启,支持定时 | `sudo shutdown -h 22:00` | 计划维护或广播通知 | | `poweroff` | 立即关机并断电 | `sudo poweroff` | 快速关闭物理机或虚拟机 | | `halt` | 停止系统运行 | `sudo halt -p` | 需手动断电的特殊场景 | | `reboot` | 重启或强制关机 | `sudo reboot -p` | 快速重启或兼容性操作 | | `init` | 切换运行级别关机/重启 | `sudo init 0` | 传统 SysV Init 系统 | | `systemctl` | Systemd 电源管理 | `sudo systemctl reboot` | 现代发行版(Ubuntu/CentOS)| --- ### **注意事项** 1. **权限要求**: 所有关机命令需 `root` 权限,普通用户需通过 `sudo` 执行。 2. **数据安全**: - 避免直接使用 `poweroff -f` 或 `reboot -f`(强制操作可能导致数据丢失)。 - 关机前确保保存文件并关闭正在运行的服务。 3. **取消关机**: 若误操作定时关机,可通过 `shutdown -c` 取消。 4. **日志记录**: 关机事件会记录在 `/var/log/syslog` 或 `journalctl`(Systemd 系统)。 --- ### **扩展:通过快捷键触发关机** - **图形界面**: 按 `Alt + F2` 输入 `gnome-session-quit --power-off`(GNOME)或其他桌面环境对应命令。 - **物理按键**: 长按电源键(强制断电,仅限紧急情况)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值