Upstart 作业
100%

初始化 · 第 4 课

Upstart 作业

学习如何在确认使用旧式 Upstart 的系统上通过 `initctl` 检查和控制作业。

initctl 与正在运行的 Upstart 初始化守护进程通信。只有确认相关 PID 命名空间确实运行 Upstart 后,才能使用它;如果当前主机使用 systemd,应改用 systemd 的原生工具。

列出并解读作业状态

列出已知的作业及其实例:

$ initctl list

检查单个作业:

$ initctl status networking
networking start/running

Upstart 会同时报告 startstop 这样的目标,以及 runningwaiting 这样的当前状态stop/waiting 表示该作业没有运行,正在等待启动条件或手动请求;它不一定表示发生了错误。

Upstart 状态输出中的 stop/waiting 通常表示什么?

启动和停止作业

检查依赖关系和影响后,可执行:

$ sudo initctl start JOB_NAME
$ sudo initctl stop JOB_NAME

作业可以定义由环境变量区分的多个实例。在这种情况下,应提供配置要求的确切变量,并在查询或停止实例时始终带上这些变量。启动网络、存储、身份验证或远程访问作业可能中断当前会话,因此要保留通过控制台恢复的手段。

哪个命令会手动请求启动 peanuts 作业?

重启与配置变更

用以下命令请求重启一个正在运行的作业:

$ sudo initctl restart peanuts

在 Upstart 中,编辑作业文件后执行 restart,并不总是等同于使用新配置完整执行一次 stopstart:正在运行的作业可能仍以原有配置为准。请先验证修改后的 .conf 文件,再按照已安装版本对应的方法让 Upstart 重新加载配置;如果必须让新配置生效,则应遵循文档规定的停止/启动流程。

重启会造成服务中断,而且服务可能无法恢复运行。之后应检查实际服务端点和日志。

哪个命令会请求重启正在运行的 Upstart 作业 peanuts

验证作业配置

安装修改后的作业文件之前,应使用旧发行版提供的验证工具(通常是 init-checkconf),并检查所包含的脚本、环境变量、用户/组设置、重新拉起策略以及事件表达式。然后按照相应版本的 initctl reload-configuration 流程重新加载定义。

语法验证无法证明路径确实存在、凭据允许执行、事件一定会到达,或进程最终会进入就绪状态。请在具备恢复手段的环境中测试。

作业语法验证无法证明什么?

谨慎发出事件

Upstart 可以发出指定名称的事件:

$ sudo initctl emit EVENT_NAME

启动或停止表达式与之匹配的每个作业都可能作出响应。事件并非只发送给某个作业,而且其影响可能通过后续事件层层扩散。发出自定义事件或系统事件前,应检查所有匹配的配置;不要在生产主机上随意重放核心启动事件。

运行 initctl emit EVENT_NAME 时可能发生什么?

课程已完成

你已完成 Upstart 作业

现在,你可以在明确理解状态和事件作用范围的前提下操作 Upstart 作业。

  • 分别解读 initctl 输出中的目标和状态。

  • 评估影响后,启动或停止确切的作业实例。

  • 将重启与作业配置变更视为两个不同的问题。

  • 验证语法后,再测试运行时就绪状态。

  • 发出事件前,检查每一个可能匹配的表达式。

保存学习进度

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

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