In the following code, I create a service that I would like to start only after deploying files that it depends upon, and to restart it whenever those files change. This very basic recipe does not work as I'd expect:
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
At the end of the run, chef-client only logs:
- supervisor_service[test-service] action restart (up to date)
...and the service is not run. A manual sudo supervisorctl restart test-service
works fine.
As far as I'm concerned a restart action is a request for the resource to change state (enabled -> started), what is the correct way to express this to Chef?
EDIT: I thought it would be worth adding that using the :immediately modifier causes the action to execute correctly. However in practice I have multiple files that may trigger a restart, and I need all of them to be updated before restarting (exactly the behaviour :delayed is meant to provide).