chef - 更改 /etc/rc2.d/ 中的流程执行顺序

chef - change order of process execution in /etc/rc2.d/

注意:这不是关于 chef cookbook 执行顺序的问题

我正在通过 https://supermarket.chef.io/cookbooks/nginx 安装 nginx。

/etc/init.d/nginx 负责 运行 nginx 和工作。

但是当我查看 /etc/rc2.d/ 时,我看到 nginx 很早就启动了 (S20nginx ).我宁愿稍后启动它,因为 nginx 依赖于早期脚本提供的一些其他信息。具体来说,我可能最终需要 vboxadd-xxx 东西来获取 VirtualBox 来宾属性。

ls /etc/rc2.d/

-rw-r--r-- 1 root root 677 Mar 12  2014 README
lrwxrwxrwx 1 root root  20 Apr 21 11:54 S19postgresql -> ../init.d/postgresql
lrwxrwxrwx 1 root root  15 Apr 21 11:58 S20nginx -> ../init.d/nginx
lrwxrwxrwx 1 root root  15 Apr 18  2014 S20rsync -> ../init.d/rsync
lrwxrwxrwx 1 root root  17 Apr 18  2014 S30vboxadd -> ../init.d/vboxadd
lrwxrwxrwx 1 root root  21 Apr 18  2014 S30vboxadd-x11 -> ../init.d/vboxadd-x11
lrwxrwxrwx 1 root root  25 Apr 18  2014 S35vboxadd-service -> ../init.d/vboxadd-service
lrwxrwxrwx 1 root root  21 Apr 18  2014 S99grub-common -> ../init.d/grub-common
lrwxrwxrwx 1 root root  15 Apr 21 11:56 S99monit -> ../init.d/monit
lrwxrwxrwx 1 root root  18 Apr 18  2014 S99ondemand -> ../init.d/ondemand
lrwxrwxrwx 1 root root  18 Apr 18  2014 S99rc.local -> ../init.d/rc.local

所以,/etc/rc2.d/S70nginx会好很多。

我在说明书中没有找到 S20 位的属性,所以我无法使用它。

我最好的选择(来自 Best way to rename a file with chef)如下所示吗?一个脆弱的地方是 S20 是硬编码的,所以如果上游食谱更改为 S21 我将完全错过。

还担心下一个 Chef 构建会认为 S20nginx 中缺少某些东西并创建另一个符号链接来修复它。

ruby_block "re-order nginx service" do
  block do

    old_nginx_seq = '/etc/rc2.d/S20nginx'
    new_nginx_seq = '/etc/rc2.d/S70nginx'

    ::File.rename(old_nginx_seq,new_nginx_seq)

    only_if { File.exists?(old_nginx_seq)}
  end
end

有没有通用的方法来通过 Chef 指定进程启动顺序?也许与 https://docs.chef.io/resource_service.html?

除非您使用的是非常古老的 Linux 发行版,否则这很可能是找错了树。大多数发行版要么使用 Upstart 要么使用 systemd,您可以在相关服务配置文件中控制 sequencing/dependencies。