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. ajax查询数据的举例

    1.根据下拉框的值异步查询信息 HTML代码如下: <script> $(function(){ //页面载入时执行 $("#key").change(function ...

  2. nginx,wsgi,flask之间的关系

    之前看写flask 应用的一些疑问,百度上的答案解释的不错,这里记着以后可以看看Web 服务器层对于传统的客户端 - 服务器架构,客户端向服务器发送请求,服务器接收请求,处理请求,最后给客户端返回请求 ...

  3. 转: JavaScript函数式编程(二)

    转: JavaScript函数式编程(二) 作者: Stark伟 上一篇文章里我们提到了纯函数的概念,所谓的纯函数就是,对于相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用,也不依赖外部环 ...

  4. aix vg lv pv

    lsvg lsvg -o lsvg rootvg 查看rootvg的信息 lsvg -p rootvg 查看rootvg卷里的物理硬盘以及分布信息 lsvg -l rootvg 查看rootvg卷下的 ...

  5. #include <time.h>

    1 _strtime 2 difftime 3 srand 4 time 1 _strtime 函数简介 函数名: _strtime 头文件: time.h 函数原型: char * _strtime ...

  6. startActivityForResult不返回结果

    startActivityForResult不返回结果,请检查AndroidManifest中的描写叙述,是否对该Activity设置了:launchMode="singleTask&quo ...

  7. poj2503

    有关字符串的hash,用黑书上推荐的传说中的ELFhash函数 输入的话,用sscanf处理比較简洁 #include<iostream> #include<cstring> ...

  8. protobuf使用错误总结

    1>HelloWorldScene.obj : error LNK2019: 无法解析的外部符号 "public: virtual __thiscall LoginReqMessage ...

  9. ftp 解决不能上传问题

    有人建议整个关掉SELinux并且重启,于是我去/etc/selinux/config里面把SELinux给disable了.重启之后,发现可以在/home/sam/test这个文件夹上传了!

  10. 批处理就是windows的杰作啊

    今天要为了解决vs不能同时开启调试和编写的问题,我就上网查找了一些批处理的命令,用批处理调用exe,和打开txt,虽然一行代码就解决了但是我没用过啊,很陌生. call  路径\a.exe  就相当于 ...