Upstart 由 Canonical 开发,因此它曾是 Ubuntu 上的 init 实现;然而,在现代 Ubuntu 安装中,现在使用的是 systemd。Upstart 的创建是为了改进 SysV 的问题,例如严格的启动流程、任务阻塞等。Upstart 的事件和作业驱动模型使其能够响应发生的事件。
要确定您是否正在使用 Upstart,如果您有一个 /usr/share/upstart 目录,这是一个很好的指示。
Job(作业)是 Upstart 执行的操作,而 Event(事件)是从其他进程接收到的触发作业的消息。要查看作业及其配置的列表:
pete@icebox:~$ ls /etc/init
acpid.conf mountnfs.sh.conf
alsa-restore.conf mtab.sh.conf
alsa-state.conf networking.conf
alsa-store.conf network-interface.conf
anacron.conf network-interface-container.conf
在这些作业配置中,您会找到关于如何以及何时启动作业的信息。
例如,在 networking.conf 文件中,它可能包含如下简单的内容:
start on runlevel [235]
stop on runlevel [0]
这意味着它将在 runlevel 2、3 或 5 上开始设置 networking,并在 runlevel 0 上停止 networking。编写配置文件的方式有很多种,当您查看可用的不同作业配置时,您会发现这一点。
Upstart 的工作方式如下:
- 首先,它从
/etc/init加载作业配置。 - 一旦发生启动事件,它将运行由该事件触发的作业。
- 这些作业将产生新的事件,然后这些事件将触发更多作业。
- Upstart 会持续执行此操作,直到完成所有必要的作业。