我有一个首次启动脚本 /etc/init/firstboot.conf,它从“文件系统”启动。此文件创建了一些指向 /usr/lib 中某些库的符号链接
问题是,/etc/init/lightdm.conf 也在“文件系统”上启动。
如果我向后遍历,mountall.conf 是发出“文件系统”事件的文件,当生成此事件时,lightdm.conf 以及我的自定义 firstboot.conf 都会尝试执行它们的脚本,但顺序无法保证,您永远无法知道哪一个先运行。现在我想始终确保 firstboot.conf 在 lightdm.conf 之前运行。如何在不编辑 lightdm.conf 的情况下确保这一点(我知道我可以通过在我的 firstboot.conf 中发出事件来创建依赖项并修改 lightdm.conf 以在发出的事件上启动,但我不想这样做。需要一种更好的方法,只处理我的自定义 firstboot.conf !!)
答案1
没有办法强制两个 upstart 作业的启动顺序,它们都在同一事件上启动,filesystem
在本例中,根据新贵食谱。但是,您可以修改upstart 作业,使其在事件发出firstboot
之前运行。filesystem
例如,如果你的脚本只需要挂载一个特定的文件系统,你可以让它只依赖于安装该文件系统的事件:
start on mounted MOUNTPOINT=/usr
这应该会导致您的脚本在您需要的文件系统准备就绪之后但在发出事件firstboot
之前运行。修改变量为脚本需要执行其功能的文件系统挂载点。filesystem
MOUNTPOINT
/etc/fstab
你也可以让你的firstboot
脚本在 lightdm 之前执行,如果你想要表达的是依赖关系,通过使用事件starting
,并让你的脚本使用
start on starting lightdm
答案2
由于我没有足够的业力来评论,所以发布一个答案:
start on mounted MOUNTPOINT=/usr
不是怎么做的。只有当用户拥有单独的 /usr 文件系统时才会发出此事件,这种情况并不常见。
start on starting lightdm
是实现此目的的完美方式。启动事件会阻止 lightdm 继续启动,直到您的作业启动为止。