【问题标题】:Launching SASS as a daemon from Chef Cookbook从 Chef Cookbook 启动 SASS 作为守护进程
【发布时间】:2014-01-01 07:22:44
【问题描述】:

我希望从 Chef Cookbook 中获得有关启动 SASS --watch 作为守护进程的一些指导。以下似乎不起作用:

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

【问题讨论】:

  • 你能附上厨师运行的输出吗?这可能就像在路径中没有 sass 一样简单。
  • 你想看哪个厨师的输出?还要澄清一下,如果我 ssh 进入虚拟机,我可以启动 SASS --watch,但希望启用它并直接从厨师脚本运行而无需干预。
  • 您找到解决方案了吗?我面临着类似的事情
  • 很遗憾,我从未找到解决方案。

标签: ruby sass chef-infra vagrant


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2012-01-13
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 2023-03-02
    相关资源
    最近更新 更多