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的正常关机的更多相关文章

  1. Linux常用命令——关机重启命令

    Linux常用命令--关机重启命令 Linux  shutdown 语法:shutdown [选项] 时间 -c 取消前一个关机命令 -h 关机 -r 重启 示例:shutdown -r now 其它 ...

  2. Linux学习笔记(1)linux的开关机及重启

    linux的启动流程 一.启动 (1)电源 开关   (2)选择启动方式:FLOPPY/BIOS/CDROM(软盘/bios启动/光盘) 基于MBR引导方式 [1]MBR:最多只能划分4个主分区,逻辑 ...

  3. linux下常用关机命令

    linux下常用的关机命令有:shutdown.halt.poweroff.init:重启命令有:reboot.下面本文就主要介绍一些常用的关机命令以及各种关机命令之间的区别和具体用法. 首先来看一下 ...

  4. linux注销、关机、重启

    一.Logout 注销是登陆的相对操作,登陆系统后,若要离开系统,用户只要直接下达logout命令即可:[root@laolinux root]#logoutRed Hat Linux release ...

  5. Linux基础---开关机与帮助

    1.X window与文字模式的切换 通常我们也称文字模式为 终端机接口, terminal或console!Linux预设的情况下, 会提供六个Terminal来让使用者登入,切换的方式为: [Ct ...

  6. Linux三种关机/重启系统的命令

    Linux提供了三种关机/重启系统的命令:shutdown.halt和reboot.这三个命令在一般情况下只有 系统的超级用户(一般是指root)才可以执行.输入没有参数的shutdown命令,两分钟 ...

  7. Linux几种关机(重启)相关命令

    在linux下一些常用的关机/重启命令有shutdown.halt.reboot.及init,它们都可以达到重启系统的目的,但每个命令的内部工作过程是不同的,通过本文的介绍,希望你可以更加灵活的运用各 ...

  8. Linux如何正确关机

    其实,在Linux领域内大多用在服务器上,很少遇到关机的操作.毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机. Linux和windows不同,在 Linux 底下,由于每个程序( ...

  9. Linux 学习 (六) 关机与重启命令

    Linux达人养成计划 I 学习笔记 shutdown [选项] 时间 -c:取消前一个关机命令 -h:关机 -r:重启 shutdown命令会在关机或重启时自动保存系统中正在运行的服务,最安全的关机 ...

随机推荐

  1. accordion

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 在mysql 中两种锁定问题

    mysql 中15.2.10.5 中描述了两个问题,且分别给出了解决办法. 1.向子表中写入数据,但写入之前需确保父表中存在其相应信息. 可能出现,在已经读取父表中的数据,但另一请求将其删除. 办法: ...

  3. WinCmd

    Q1:tracert Tracert (跟踪路由)是路由跟踪实用程序,用于确定 IP 数据报访问目标所采取的路径. Tracert 命令用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确定 ...

  4. vs2005 测试 lua环境

    (1)添加文件核路径 (2)库文件路径 (3)main.cpp #include <stdio.h>#include <string.h> extern "C&quo ...

  5. 什么是web标准

    Web Standards Standards是个复数,就知道他是有好几个标准或者规范组成的,分别是:结构规范 XML ,XHTML;表现规范 CSS;行为规范 DOM,ECMAScript; 上面是 ...

  6. 普林斯顿大学算法课 Algorithm Part I Week 3 排序稳定性 Stability

    稳定性(Stability):先按性质A排序,再按性质B排序,性质B相同的那些项是否仍然是按性质A排序的? 一个稳定的排序,相同值的元素应仍保持相对顺序(relative order) 稳定的算法:插 ...

  7. python cmd 模块

    command模块用于执行以字符串形式指定的简单系统命令,并将其输出以字符串形式返回.此模块尽在unix系统上有效.这个模型提供的功能与在unix shell脚本使用的反引号(就是~这个键下的那个反引 ...

  8. AndroidUI 引导页面的使用

    一个应用程序都少不了欢迎页面和引导页面,本文主要讲如何制作一个引页面: 首页所有的目录结构: 新建Welcome引导页面和Activity: <RelativeLayout xmlns:andr ...

  9. mysql中使用正则表达式时的注意事项

    mysql不支持\d元字符匹配数字 mysql不支持向前.向后查找 regexp不能和not搭配使用

  10. C#.NET学习笔记7--11---算术运算符,变量赋值,变量的交换,布尔表达式1,布尔表达式2

    C#.NET学习笔记7---算术运算符 2013/9/6 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com 1.Consol ...