作者:张华  发表于:2015-04-17
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明

http://blog.csdn.net/quqi99 )

UpStart, 用于动态可插拨服务,基于事件机制,主要概念是job和event,等待event的到来,然后执行一个job.
job可以是task job(定时任务), service job(后台服务进程), abstract job(内部使用)三种。
job按其他分类方法也可以分为session job(用户会话,即用户从远客或本地登入直到退出),system job(系统的初始化,如挂载文件)。
job是有生命周期的, starting, pre-start, spawned, post-start, running, pre-stop, stoping, killed, post-stop, 其中仅有starting, started, stopping, stopped四个状态会引发init进程发送相应的event.
event分为三类,signal(非阻塞异步的), methods(阻塞同步的),hooks(阻塞同步,调用发出hooks事件的进程必须等待事件完成才可以得到控制权,但不检查事件是否成功)。
job的配置文件位于/etc/init目录,如/etc/init/mysql.conf
D-Bus是一个系统消息服务.
每个用户的习惯不一样,所以需要对用户会话进行定制,称为Session Init。字符模式相对简单,各种shell都支持一个自动运行的脚本如~/.bashrc,用户可在这里定制。但对于图形界面模式,用户登录后看到的不是shell提示符,而是一个桌面, 以ubuntu为例,用户登录登录时,显示管理器(Display Manager) lightDM启动XSession, XSession接着启动gnome-session, gnome-session负责其他的初始化工作,然就就开始了一个desktop session. 这中间的很多服务也不一定非要在启动时就全启动的,这样基于Upstart的按需启动模式就可以派上用场了。
传统的init的任务管理是基于SysVInit的,它是基于运行级别的,转用UpStart后,为向前兼容必须模拟老的SysVnit的运行级别模式,以便和多数现有软件兼容。UpStart模拟的启动过程如下:
1, 系统加电,运行BIOS上的GRUB载入内核。
2, 内核执行initrd执行硬件初始化和内核自身的初始化
3, 内核启动pid=1的init进程,即UpStart进程
4, Upstart进程在执行了一些自身的初始化工作后,立即发出startup事件
5, 所以依赖于startup的事件都会被触发,基中最重要的就是mountall来挂载文件系统, mountall job又会发出local-filesystem, virtual-filesystem, all-swaps三个events.
6, 其中virtual-filesystem event触发udev任务开始工作。
7, udev触发upstart-udev-bridge工作,接着发生net-device-up IFACE=lo事件,表示本地回环设备已就绪。同时,任务 mountall 继续执行,最终会发出 filesystem 事件。此时,任务 rc-sysinit 会被触发,因为 rc-sysinit 的 start on 条件如下:
start on filesystem and net-device-up IFACE=lo
8, 任务 rc-sysinit 调用 telinit。Telinit 任务会发出 runlevel 事件,触发执行/etc/init/rc.conf。
9, rc.conf 执行/etc/rc$.d/目录下的所有脚本,和 SysVInit 非常类似
UpStart 的命令"initctl reload"被设计为可以让服务在不重启的情况下更新配置。当收到 SIGTERM 信号后,UpStart 希望精灵进程进程立即干净地退出,释放所有资源。如果一个进程在收到 SIGTERM 信号后不退出,Upstart 将对其发送 SIGKILL 信号。

Upstart的一些常用命令, initctl命令与传统的service命令一一对照,如initctl start就等于service start, 启动服务也可以使用start <job>来简化initctl命令:
1, initctl list
2, runlevel, 相较于sysvinit,它是修改/etc/init/rc-sysinti.conf 中的 DEFAULT_RUNLEVEL 这个参数,以便修改默认启动运行级别
3, initctl emit <event>, 发送事件,用于排错

对于只安装了upstart的环境,其配置文件在/etc/init/mysql.conf,所以这时通过start mysql或initctl start mysql可以启动mysql, 但想通过/etc/init.d/mysql start方式启动时就会报找不着sysv-init的配置文件/etc/init.d/mysql,所以为了兼容,一般要做一个软链(sudo ln -s /lib/init/upstart-job /etc/init.d/mysql), upstart-job会调用upstart的相关命令去操作。
上面这种方式确实避免了upstart与sysv-init两种方式的兼容性问题,在只用upstart一种时没问题。但关键是现在一个用户可以在机器上同时安装 systemd/systemd units, upstart/upstart jobs, and sysv-init/init.d三种方法。所以这时候当执行/etc/init.d/mysql应该取决于实际的方法(如systemd)。

对于ubuntu的虚机使用upstart时会报错:Start: Unable To Connect To Upstart: Failed To Connect To Socket /Com/Ubuntu/Upstart: Connection Refused

workaround如下:

sudo dpkg-divert --local --rename --add /sbin/initctl
ln -s /bin/true /sbin/initctl

Upstart笔记(by quqi99)相关推荐

  1. Plone学习笔记 ( by quqi99 )

    Plone学习笔记 ( by quqi99 ) 作者:张华 发表于:2008-10-19  ( http://blog.csdn.net/quqi99 ) 版权声明:可以任意转载,转载时请务必以超链接 ...

  2. Magnolia学习笔记(一个基于JSR170的内容管理系统) ( by quqi99 )

                         Magnolia学习笔记(一个基于JSR170的内容管理系统) ( by quqi99 ) 作者:张华 发表于:2007-05-24  ( http://bl ...

  3. Fedora 16上源码建立pydev + eclipse的OpenStack开发环境笔记草稿 ( by quqi99 )

    Fedora 16上源码建立pydev + eclipse的OpenStack开发环境笔记草稿  ( by quqi99 ) 作者:张华  发表于:2012-3-30 版权声明:可以任意转载,转载时请 ...

  4. 菜鸟学Linux 第033篇笔记 bootloader,inittab

    菜鸟学Linux 第033篇笔记 bootloader,inittab Linux 系统自启动流程 PC OS (Linux) POST-->BIOS(Boot Sequence)-->M ...

  5. docker 笔记(2) -- 镜像

    docker 笔记(2) -- 镜像 Ubuntu 14.04 无论如何,飞蛾扑火都是一种高贵的姿态. 参考 菜鸟教程 -- docker 额 当使用的镜像文件本地不存在时,则从远程镜像库中下载,默认 ...

  6. Docker学习笔记 之 Docker安装配置使用

    简介 Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机).bare met ...

  7. Django笔记 —— 表单(form)

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  8. Redis学习笔记(五)——持久化及redis.conf配置文件叙述

    对于日常使用来说,学习完SpringBoot集成Redis就够我们工作中使用了,但是既然学习了,我们就学习一些Redis的配置及概念,使我们可以更深层次的理解Redis,以及增强我们的面试成功概率,接 ...

  9. 总结:linux笔记-003

    目录 一.touch命令 二.systemctl 1.介绍 2.常用命令 三.rpm命令 1.介绍 2.相关命令 四. Linux chkconfig系统服务管理命令 1.介绍 2.运行级别(0-6) ...

最新文章

  1. Glide二次封装库的使用
  2. velocity.js 动画插件
  3. http的请求类型 get 、post、delete、put、patch之间的区别
  4. 房地产仍是经济支柱行业 80%中小房企面临合并
  5. MySQL 数据库热备的操作
  6. 《天天数学》连载08:一月八日
  7. 没有5G也很香!iPhone去年四季度出货量了解下
  8. C#调用非托管代码(C++方法)的2种方式
  9. JAVA8 之 Stream sorted() 示例
  10. spring boot访问zul页面总是变为下载页面
  11. USB Server助力广汽埃安U盾远程安全管控
  12. office文档图标显示不正常
  13. css背景颜色跟随文字颜色、设置文字颜色反色
  14. vmware,qemu各种方式上网设置(转)
  15. linux mlocate.db文件文件过大
  16. unity-光照实时GI(Realtime GI)
  17. 笔记本合上盖子锁定计算机,解决:win10笔记本电脑不合上盖子时也锁定
  18. Java音乐播放器设计
  19. 微信模板消息发送成功但显示空白的问题
  20. 清默网络——CCIE考试经验与心得(1)

热门文章

  1. 939. 最小面积矩形
  2. 承认吧星巴克,你就是个卖杯子的
  3. VIPKID -- 一面+二面
  4. 23 种设计模式详解
  5. matlab中 feof(fp),feof和ferror函数,C语言feof和ferror函数详解
  6. USB充电,标准充电器,非标准充电器的区别
  7. python掷骰子实验报告_python-模拟掷骰子,两个筛子数据可视化
  8. Kib Kb KB KIB Byte bit 区别
  9. [置顶]历史书单http://www.cnblogs.com/xing901022
  10. 最热网友收藏:写得蛮好的linux学习笔记(2007年第10周)