Ubuntu

如何使用 Chef 在 linux 上創建後台服務?

  • February 14, 2017

我有一個screen在 ubuntu 主機上使用的 Python 腳本,我想使用 Chef 配方將其轉換為適當的後台服務。python 腳本只是啟動一個丟棄所有電子郵件的 SMTP 伺服器(一個“黑洞”伺服器,對測試很有用),然後呼叫 pythonasyncore.loop()永遠執行。

我如何把它變成廚師食譜?我正在使用該cookbook_file資源來上傳我的 python 腳本,並且我知道我需要使用該service 資源來啟動服務,但我不確定如何實際創建服務。我是否需要在作業系統級別寫入文件/etc/init.d/etc/systemd創建服務,或者是否有一些廚師食譜/資源我可以使用給定的命令呼叫來為我創建後台服務?

我正在使用 Chef 11.18.12並且無法升級,因此排除了一些需要 12+ 的食譜(如runit )。主機作業系統是 Ubuntu 14.04.3

這是我到目前為止所得到的:

include_recipe 'apt'
include_recipe 'python'

# the python script to run as a background service    
cookbook_file '/usr/local/bin/smtp_server_blackhole.py' do
 source 'smtp_blackhole_server.py'
 owner 'root'
 group 'root'
 mode '0755'
end

# the init.d file which defines the service? Not sure about this part...
cookbook_file "init.d_smtp_server_blackhole" do
   path "/etc/init.d/smtp_server_blackhole.py"
   source "init.d_smtp_server_blackhole"
   owner "root"
   group "root"
   mode "0755"
end

service "smtp_blackhole_server.py" do
 # this doesn't work, because the command doesn't reference an existing service?
 start_command 'python /usr/local/bin/smtp_blackhole_server.py -c bounce'
 action [ :enable, :start ]

 # I think I need to do something like this, to wait for the init.d file to be written
 subscribes :restart, "cookbook_file[init.d_smtp_server_blackhole]", :immediately
end

潛在的解決方案

  1. daemontools是一個 LWRP,它允許您使用執行命令的模板文件創建服務。但是,它已經有幾年沒有更新了,它需要您svscan為“適當的 init 系統”設置服務。
  2. 這個問題對於如何使用各種程式碼範例和 Python 庫(例如python-daemondaemonize)編寫 Python 守護程序服務有一些很好的答案,但它不包括如何在廚師食譜中以冪等方式執行作業系統命令.
  3. https://github.com/poise/poise-service看起來像我需要的,但它不支持 Chef 11.18,因為 poise 2.0 需要 Chef 12+。

對於 Ubuntu 14.04,您很可能希望從 Upstart 開始,因為那是系統初始化框架。查看 poise-service 中的 upstart Erb 模板以了解如何設置或查看 Canonical 的 Upstart Cookbook。如果你想使用 Upstary 以外的東西,我會推薦 Supervisord,因為它既簡單又在 Python 社區中很流行。

引用自:https://serverfault.com/questions/831973