3

我希望获得一些关于启动 SASS --watch 作为 Chef Cookbook 中的守护进程的指导。以下似乎没有解决问题:

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 作为服务运行。

厨师的输出:

[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
4

1 回答 1

1

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

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

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

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

于 2013-12-31T23:22:44.853 回答