Linux的正常关机

Azure上的
IaaS 虚拟机可使用多种方式关闭,例如通过 Azure
管理门户、Azure Powershell cmdlet
或 CLI
工具,甚至还可以由交互式登录的用户关闭。Azure
平台本身甚至也能关闭虚拟机以执行平台维护。运行在本地裸机中的Linux
系统的关闭流程很好理解,但是这一切到了云上如何运行呢?
在 Azure
上启动正常关机
在
Azure 中关闭 Linux
虚拟机的流程与本地模式基本一样。当用户登录并运行“/sbin/shutdown now”后,正常结果是系统将立即开始停止任何正在运行的服务,并最终关闭整个系统。当然,具体机制在一定程度上取决于使用的Linux
版本和 Init
系统(通常是 SysV、Upstart
或 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
系统就能确保应用程序正常关闭。
大多数情况下,现有 SysV、Systemd
或 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/
Linux的正常关机的更多相关文章
- Linux常用命令——关机重启命令
Linux常用命令--关机重启命令 Linux shutdown 语法:shutdown [选项] 时间 -c 取消前一个关机命令 -h 关机 -r 重启 示例:shutdown -r now 其它 ...
- Linux学习笔记(1)linux的开关机及重启
linux的启动流程 一.启动 (1)电源 开关 (2)选择启动方式:FLOPPY/BIOS/CDROM(软盘/bios启动/光盘) 基于MBR引导方式 [1]MBR:最多只能划分4个主分区,逻辑 ...
- linux下常用关机命令
linux下常用的关机命令有:shutdown.halt.poweroff.init:重启命令有:reboot.下面本文就主要介绍一些常用的关机命令以及各种关机命令之间的区别和具体用法. 首先来看一下 ...
- linux注销、关机、重启
一.Logout 注销是登陆的相对操作,登陆系统后,若要离开系统,用户只要直接下达logout命令即可:[root@laolinux root]#logoutRed Hat Linux release ...
- Linux基础---开关机与帮助
1.X window与文字模式的切换 通常我们也称文字模式为 终端机接口, terminal或console!Linux预设的情况下, 会提供六个Terminal来让使用者登入,切换的方式为: [Ct ...
- Linux三种关机/重启系统的命令
Linux提供了三种关机/重启系统的命令:shutdown.halt和reboot.这三个命令在一般情况下只有 系统的超级用户(一般是指root)才可以执行.输入没有参数的shutdown命令,两分钟 ...
- Linux几种关机(重启)相关命令
在linux下一些常用的关机/重启命令有shutdown.halt.reboot.及init,它们都可以达到重启系统的目的,但每个命令的内部工作过程是不同的,通过本文的介绍,希望你可以更加灵活的运用各 ...
- Linux如何正确关机
其实,在Linux领域内大多用在服务器上,很少遇到关机的操作.毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机. Linux和windows不同,在 Linux 底下,由于每个程序( ...
- Linux 学习 (六) 关机与重启命令
Linux达人养成计划 I 学习笔记 shutdown [选项] 时间 -c:取消前一个关机命令 -h:关机 -r:重启 shutdown命令会在关机或重启时自动保存系统中正在运行的服务,最安全的关机 ...
随机推荐
- img标签的方方面面
<IMG>标签的方方面面 <img>标签是页面上最为重要的元素之一.很难想象一个页面上没有图片的样子,这样的页面效果将会大打折扣. 任何一个前端工程师想必对<img> ...
- 关于 <video> 的兼容性测试
测试浏览器 Firefox: 33.0.1 Chrome: 38.0.2125.111 m Safari: 5.1.7 IE: 9 和 10(6,7,8不考虑) 经测试:FF.Chrome.Safar ...
- NET Core开发-读取配置文件Configuration
ASP.NET Core开发-读取配置文件Configuration ASP.NET Core 是如何读取配置文件,今天我们来学习. ASP.NET Core的配置系统已经和之前版本的ASP.NE ...
- POJ——位查询
3:位查询 查看 提交 统计 提问 总时间限制: 5000ms 内存限制: 65536kB 描述 给出N个范围在[0, 65535]的整数,编程支持以下的操作: (1)修改操作:C d,所有的数 ...
- auto, extern, register, static
对于一个数据的定义,需要指定2中属性: 存储类型和数据类型: static int a; auto char c; register int d; 1 auto 2 extern 3 register ...
- jquery实现文字选择器
$( "div:contains('John')" ).css( "text-decoration", "underline" );
- 利用PowerDesigner15在win7系统下对MySQL 进行反向project(二)
利用PowerDesigner15在win7系统下对MySQL 进行反向project 1.打开PowerDesigner,建立新模型.选择Physical Data Model中的Physical ...
- openstack之horizon源码分析
一.基础准备: Horizon是基于django webframework开发的标准的Python wsgi程序,django的设计专注于代码的高度可重用,信奉DRY原则,一切面向对象,而Horizo ...
- 执行SQL存储脚本
using System.Data.SqlClient; static void Main(string[] args) { string connString = @"Data Sourc ...
- 在.NET下学习Extjs(第三个案例 Array的过滤方法(filter))
Ext.Array.filter(Array array,Function fn,Object scope):Array array是一个数组,fn是过滤函数,scope是作用域,filter返回的是 ...