如何改变启动时服务的执行顺序?

如何改变启动时服务的执行顺序?

我的 init.d 文件夹中有一些服务,例如 hdfs、zookeeper、elasticsearch、hbase 等等。

现在,我已通过执行命令将所有这些服务添加到启动项中update-rc.d 'service' defaults。众所周知,如果未启动 hdfs 和 zookeeper,则 hbase 无法运行。因此,我想先启动 hdfs,然后启动 zookeeper,最后启动 hbase。

我该怎么做呢?

答案1

update-rc.d(8) 启用或禁用服务,而服务的排序由 insserv(8) 处理,可以通过编辑服务的 LSB 标头并设置/添加来进行定制:

Required-Start: $all

在最旧的版本中,我可以做这样的事情来确定顺序:

update-rc.d myservice start 95 2 3 4 5 . stop 70 0 1 6 .

但是在 Ubuntu 14 之后,我尝试了这个 Ubuntu 16.04 (4.4.0-31-generic):

update-rc.d myservice defaults 95 70

并且不起作用,总是创建标题中定义的顺序:

 sudo find /etc/ -name ???myservice | sort
/etc/rc0.d/K01myservice
/etc/rc1.d/K01myservice
/etc/rc2.d/S03myservice
/etc/rc3.d/S03myservice
/etc/rc4.d/S03myservice
/etc/rc5.d/S03myservice
/etc/rc6.d/K01myservice

也可以尝试:

update-rc.d myservice defaults any_text_wath_you_want lalala

Ands 似乎忽略了“defaults”之后的所有文本。我不知道它在安装我的命令时会做什么,我不认为该命令以前安装过服务。

答案2

您可以通过数字来执行此操作,update-rc.d 'service' defaults number其中数字是整数,序列号越小,队列中的服务越高,即它将在具有较大序列号的其他服务之前执行。

上述命令将为启动和终止服务赋予相同的优先级。您可以进一步微调。

因此,如果您的服务具有很多依赖项,则可以为其指定一个较大的序列号,以确保其所有依赖项在其启动之前都已启动。

相关内容