В следующем коде я создаю службу, которую хочу запускать только после развертывания файлов, от которых она зависит, и перезапускать ее всякий раз, когда эти файлы меняются. Этот очень простой рецепт работает не так, как я ожидал:
supervisor_service "test-service" do
command "/bin/cat"
autostart false
action :enable
end
cookbook_file "/tmp/test.txt" do
source "test.txt"
notifies :restart, 'supervisor_service[test-service]'
end
В конце прогона chef-client регистрирует только:
- supervisor_service [test-service] перезапуск действия (актуальный)
... и служба не запускается. Руководство sudo supervisorctl restart test-service
работает отлично.
Насколько я понимаю, действие перезапуска - это запрос ресурса на изменение состояния (включен -> запущен), как правильно сообщить об этом Chef?
РЕДАКТИРОВАТЬ: Я подумал, что стоит добавить, что использование модификатора: немедленно приводит к правильному выполнению действия. Однако на практике у меня есть несколько файлов, которые могут вызвать перезапуск, и мне нужно, чтобы все они были обновлены перед перезапуском (именно для этого и предназначено поведение: delayed).
Я использую Chef 10.14.4, и у меня такие же проблемы, как и у вас. Какую версию ты используешь?
Уведомление появляется в файле журнала, как будто оно собирается запустить действие: restart для поставщика supervisor_service:
INFO: cookbook_file[/tmp/test.txt] sending restart action to supervisor_service[test-service] (delayed)
INFO: Processing supervisor_service[test-service] action restart (temp::default line 16)
но тогда мы просто получаем:
INFO: Chef Run complete in 14.302624 seconds
Между тем, лучшее, что я мог заставить работать, это:
supervisor_service "test-service" do
command "/bin/cat"
autostart false
action :enable
end
execute "restart test-service" do
command "supervisorctl restart test-service"
user "root"
action :nothing
end
cookbook_file "/tmp/test.txt" do
source "test.txt"
notifies :run, "execute[restart test-service]"
end
который по сути является тем же кодом, который предназначен для запуска, но не работает.
Поскольку это работает нормально, но уведомление поставщика supervisor_service - нет, можно только предположить, что ошибка существует внутри этот файл в кулинарной книге супервизора (v0.4.0).