作为厨师Cookbook的守护进程启动SASS

时间:2012-12-08 03:37:30

标签: ruby sass chef vagrant

我希望能有一些关于推出SASS的指导 - 作为厨师食谱中的守护进程。以下似乎没有做到这一点:

lib="/vagrant/lib"
sassPath="#{lib}/sass"

include_recipe 'ruby'

execute 'install-sass' do
    command 'gem install sass'
end

execute "mkdir-lib" do
    not_if {File.exists?(lib)}
    command "mkdir #{lib}"
end

execute "mkdir-sass" do
    not_if {File.exists?(sassPath)}
    command "mkdir #{sassPath}"
end

execute "create-procfile" do
    command "nohup sass --watch #{sassPath}:#{lib} &"
end

Chef成功完成。似乎没有办法运行sass - watch as a service。

Chef的输出:

[default] Running chef-solo...
stdin: is not a tty
[2012-12-19T19:39:44+00:00] INFO: *** Chef 10.14.2 ***
[2012-12-19T19:39:27+00:00] INFO: Setting the run_list to ["recipe[ruby]",         "recipe[sass]"] from JSON
[2012-12-19T19:39:27+00:00] INFO: Run List is [recipe[ruby], recipe[sass]]
[2012-12-19T19:39:27+00:00] INFO: Run List expands to [ruby, sass]
[2012-12-19T19:39:27+00:00] INFO: Starting Chef Run for precise64
[2012-12-19T19:39:27+00:00] INFO: Running start handlers
[2012-12-19T19:39:27+00:00] INFO: Start handlers complete.
[2012-12-19T19:39:27+00:00] INFO: Processing execute[apt-update] action run (ruby::default line 1)
[2012-12-19T19:39:40+00:00] INFO: execute[apt-update] ran successfully
[2012-12-19T19:39:40+00:00] INFO: Processing package[ruby] action install (ruby::default line 5)
[2012-12-19T19:39:57+00:00] INFO: Processing execute[install-sass] action run (sass::default line 6)
[2012-12-19T19:40:54+00:00] INFO: execute[install-sass] ran successfully
[2012-12-19T19:40:54+00:00] INFO: Processing execute[mkdir-lib] action run (sass::default line 10)
[2012-12-19T19:40:54+00:00] INFO: Processing execute[mkdir-sass] action run (sass::default line 15)
[2012-12-19T19:40:54+00:00] INFO: Processing execute[create-procfile] action run (sass::default line 20)
[2012-12-19T19:40:54+00:00] INFO: execute[create-procfile] ran successfully
[2012-12-19T19:40:54+00:00] INFO: Chef Run complete in 87.021831 seconds
[2012-12-19T19:40:54+00:00] INFO: Running report handlers
[2012-12-19T19:40:54+00:00] INFO: Report handlers complete

1 个答案:

答案 0 :(得分:1)

运行命令时,该命令将作为父Chef Client进程的child process执行。在linux-land中,子进程在其父进程终止时终止。

如果您将Chef Client作为脚本(如cron或手动)运行,则父进程就是该脚本。因此,即使您对子进程进行后台处理,它也会在父进程死亡时被终止。在这种情况下,当Chef Client运行完成时会发生这种情况。

在后台运行带有&的脚本绝不是推荐的方法,尤其是在生产中。相反,您应该将SASS观察程序包装为init.d或服务,然后使用Chef的本机service资源。

您可能还会考虑将SASS观察者妖魔化,这会将进程与父进程分离,从而使其在运行完成后继续存在。但是,如果这样做,您将需要手动管理PID文件 - 否则您将为每个Chef Client运行一个新进程。