Upstart 是由 Canonical 开发的旧式事件驱动 init 与服务管理系统。旧版 Ubuntu 和其他一些发行版曾使用它,但当前 Ubuntu 使用 systemd。只有维护已经确认的旧主机时才应研究 Upstart,不能把它当作现代安装的默认假设。
初始化 · 第 3 课
Upstart 概述
了解旧式 Upstart init 系统如何把事件表达式与作业生命周期目标连接起来。
确认旧式 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 on 或 stop on 表达式会更新作业目标;作业转换又可以发出其他事件,解锁后续工作。互不依赖的作业可以并发推进。
该模型避免使用一套硬编码的全局脚本顺序,但事件名称、顺序和条件隐含时可能难以诊断。事件默认不是持久消息队列,因此后来新增作业或更改条件时,不能假定所有过去事件都会重放。
一个 Upstart 作业如何促使另一个作业启动?
迁移与兼容
Systemd 可以为某些旧式服务脚本提供有限兼容性,但不会把 Upstart 作业语法作为原生 systemd 单元执行。迁移时,应翻译生命周期条件、环境、重生策略、日志、依赖和就绪语义,而不是机械地重命名文件。
当前标准 Ubuntu 版本使用哪种 init 系统?
课程已完成
你已完成 Upstart 概述
现在,你可以把 Upstart 解读为旧式事件与作业模型。
确认活动 PID 1 和控制接口。
区分作业定义与事件通知。
把
start on和stop on解读为生命周期表达式。显式迁移语义,而不是重命名配置文件。