Upstart 概述
100%

初始化 · 第 3 课

Upstart 概述

了解旧式 Upstart init 系统如何把事件表达式与作业生命周期目标连接起来。

Upstart 是由 Canonical 开发的旧式事件驱动 init 与服务管理系统。旧版 Ubuntu 和其他一些发行版曾使用它,但当前 Ubuntu 使用 systemd。只有维护已经确认的旧主机时才应研究 Upstart,不能把它当作现代安装的默认假设。

确认旧式 Upstart 主机

检查 PID 1 和活动控制接口:

$ ps -p 1 -o pid,comm,args=
$ readlink /proc/1/exe
$ initctl version

最后一条命令只有在 Upstart 控制服务和客户端存在时才会返回有意义的结果。/usr/share/upstart 等目录或 /etc/init 下残留文件是较弱证据,因为其他 init 系统接管后,软件包和迁移残留仍可能存在。

主机确实使用 Upstart 的最有力证据是什么?

作业与事件

Upstart 作业描述一个服务或任务,包括其进程命令和生命周期条件。事件是带有可选环境变量的命名通知。作业配置可以表达其目标何时应转向启动或停止。

系统作业文件通常位于 /etc/init/ 下,并以 .conf 结尾。例如:

description "Example worker"
start on runlevel [2345]
stop on runlevel [016]
exec /usr/local/sbin/example-worker

该示例把运行级别事件用作兼容输入。Upstart 还可以响应文件系统、设备、网络或应用程序定义的事件,具体取决于系统会发出什么。

Upstart 的 start on 段定义什么?

事件驱动启动

启动期间,Upstart 加载作业定义并接收事件。匹配的 start onstop on 表达式会更新作业目标;作业转换又可以发出其他事件,解锁后续工作。互不依赖的作业可以并发推进。

该模型避免使用一套硬编码的全局脚本顺序,但事件名称、顺序和条件隐含时可能难以诊断。事件默认不是持久消息队列,因此后来新增作业或更改条件时,不能假定所有过去事件都会重放。

一个 Upstart 作业如何促使另一个作业启动?

迁移与兼容

Systemd 可以为某些旧式服务脚本提供有限兼容性,但不会把 Upstart 作业语法作为原生 systemd 单元执行。迁移时,应翻译生命周期条件、环境、重生策略、日志、依赖和就绪语义,而不是机械地重命名文件。

当前标准 Ubuntu 版本使用哪种 init 系统?

课程已完成

你已完成 Upstart 概述

现在,你可以把 Upstart 解读为旧式事件与作业模型。

  • 确认活动 PID 1 和控制接口。

  • 区分作业定义与事件通知。

  • start onstop on 解读为生命周期表达式。

  • 显式迁移语义,而不是重命名配置文件。

保存学习进度

创建免费账户即可保存本课进度,并在任意设备上继续学习。

创建免费账户
下一节
返回 初始化