chef - 在/etc/rc2.d/

时间:2016-04-28 17:44:14

标签: process chef

注意:这不是关于厨师食谱执行订单

的问题

我正在通过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

1 个答案:

答案 0 :(得分:1)

除非您使用的是非常旧的Linux发行版,否则很可能会出错。大多数发行版都使用Upstart或systemd,您可以控制相关服务配置文件中的顺序/依赖项。