Service Vagrant:定义定制厨师服务或引导脚本的简单方法

Service Vagrant:定义定制厨师服务或引导脚本的简单方法,service,chef-infra,vagrant,init.d,cookbook,Service,Chef Infra,Vagrant,Init.d,Cookbook,我有一个Vagrant项目,它定义了几个VM。在其中一个上,我需要运行一些命令来调优内核参数,从远程位置下载一个文件,并启动一个守护进程。目前我在cookbooks/*/recipes/default.rb中定义: execute "sudo tune-kernel-parameter" execute "curl http://something/ > /tmp/some-file" execute "sudo some-daemon --config /tmp/some-file"

我有一个Vagrant项目,它定义了几个VM。在其中一个上,我需要运行一些命令来调优内核参数,从远程位置下载一个文件,并启动一个守护进程。目前我在
cookbooks/*/recipes/default.rb中定义:

execute "sudo tune-kernel-parameter"
execute "curl http://something/ > /tmp/some-file"
execute "sudo some-daemon --config /tmp/some-file"
当我第一次游荡起来时,一切都很好。当然,如果机器重新启动,这些命令都不会再次运行,因为它们不是任何init脚本的一部分

我想我总是可以运行
vagrant reload
来重新启动VM,但我希望它能够直接重新启动。换句话说,拥有一个持久的“服务”

现在,如果我想花时间查找这些文件的正确语法(在我已经完成了验证立即命令是否符合我的要求之后),可以用修改
/etc
中的文件来替换上面给出的一些命令(内核调优)。对于其他人(启动守护进程),我可能能够使用预定义的服务,即定义服务的Ubuntu包,我可以在
/etc
中配置该服务,并开始使用
服务
资源

但是还有一些特殊的命令,比如上面提到的下载(必须在守护进程启动之前完成)。大概我可以使用
模板
资源在
/etc/init.d/
中定义一个脚本,然后使用
服务
在设置时启动它(尽管这意味着这比听起来更复杂)

但是,难道没有标准的方法可以简单地要求在资源调配期间和随后的重新启动时运行一个简短的内联脚本吗?介于
执行
服务
之间的东西,例如

init_script <<-END
    sudo tune-kernel-parameter
    curl http://something/ > /tmp/some-file
    sudo some-daemon --config /tmp/some-file
END

init_script您可以使用
/etc/rc.local
来实现:

file "/etc/rc.local" do
  content <<-EOC
    sudo tune-kernel-parameter
    curl http://something/ > /tmp/some-file
    sudo some-daemon --config /tmp/some-file
  EOC
  mode 0755
  notifies :run, "execute[rc.local]"
end

execute "rc.local"
  command "/etc/rc.local"
  action :nothing
end
file”/etc/rc.local“do

你找到解决这个问题的方法了吗?回答你自己的问题没关系。请不要忘记将答案标记为正确!:)