如何允许 Upstart 任务阻止系统启动?

如何允许 Upstart 任务阻止系统启动?

我正在编写一个在运行级别 1 运行的 Upstart 任务。

这是针对加密系统的,任务的作用是验证 MBR 和 /boot 的完整性。因此,在系统启动期间尽早运行此任务非常重要(因此我选择了运行级别 1)。

99% 的时间里,此任务都会静默退出,但如果它检测到任何问题,它需要一种方法让用户知道,最好暂停系统启动,直到用户确认。

我尝试了以下操作进行测试,但无法中断系统启动。有什么建议吗?

在运行级别 [1] 上启动 exec echo -n “警告:MBR 和/或 /boot 已更改。按任意键继续。” exec 读取控制台输出

提前致谢!

答案1

vonbraun,运行级别的含义与过去截然不同,因此我不认为运行级别 1 实际上才是您想要的。

因为您想尽快运行,所以有两个选择。

如果您无需写入根文件系统即可工作,并且保证数据位于根文件系统上,则可以使用挂载事件。

start on mounting MOUNTPOINT=/

挂载事件是一个“钩子”,因此 mountall 将等待任何使用它的事物解除阻塞。您必须使用“task”关键字,以便您的检查可以在 mountall 解除阻塞之前完全运行。

此时,根文件系统仍处于只读状态,但应该可用。其他文件系统可能不可用,因此请注意(特别是 /var/run 在这方面可能会很棘手)。请执行不是将“AND”与另一个安装事件一起使用,因为这将锁定引导。

如果需要写入根文件系统,可以使用

start on mounted MOUNTPOINT=/

这将再次阻止 mountall,但之后 / 会重新以读写方式挂载。这应该可以防止触发启动其他部分的结果信号发生。

不过,这里没有保证,其他一些事情也会同时进行。然而,最多启动将被延迟以等待访问文件系统,并且在所述场景中,这似乎是期望的结果。

请注意,Upstart 手册中有很多很好的相关想法

http://upstart.ubuntu.com/cookbook/

祝你好运!

相关内容