Ubuntu
如何使用 Chef 在 linux 上創建後台服務?
我有一個
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
潛在的解決方案
- daemontools是一個 LWRP,它允許您使用執行命令的模板文件創建服務。但是,它已經有幾年沒有更新了,它需要您
svscan
為“適當的 init 系統”設置服務。- 這個問題對於如何使用各種程式碼範例和 Python 庫(例如python-daemon和daemonize)編寫 Python 守護程序服務有一些很好的答案,但它不包括如何在廚師食譜中以冪等方式執行作業系統命令.
- 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 社區中很流行。