У меня есть сценарий Python, который я выполняю с помощью screen
на хосте ubuntu, и я хочу превратить это в надлежащую фоновую службу, используя рецепт Chef. Сценарий python просто запускает SMTP-сервер, который отбрасывает все электронные письма (сервер «черная дыра», полезный для тестирования), а затем вызывает python asyncore.loop()
бежать вечно.
Как превратить это в рецепт шеф-повара? Я использую cookbook_file
ресурс для загрузки моего скрипта Python, и я знаю, что мне нужно использовать service
ресурс чтобы запустить службу, но я не знаю, как на самом деле Создайте сервис для начала. Мне нужно записать файл в /etc/init.d
или /etc/systemd
для создания службы на уровне ОС, или есть какой-то рецепт / ресурс Chef, который я могу вызвать, чтобы создать для меня фоновую службу с заданной командой?
Я использую шеф 11.18.12 и не может обновиться, поэтому некоторые поваренные книги (например, запустить его), для которых требуется 12+. ОС хоста - 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
svscan
сервис для «соответствующей системы инициализации».Для Ubuntu 14.04 вы, скорее всего, захотите начать с Upstart, поскольку это система инициализации системы. Ознакомьтесь с шаблоном Erb-выскочки в poise-service, чтобы узнать, как все настраивать, или ознакомьтесь с Поваренной книгой Upstart от Canonical. Если вы хотите использовать что-то другое, кроме Upstary, я бы порекомендовал Supervisord как из-за его простоты, так и из-за его популярности в сообществе Python.