Ubuntu 14.04 LTS + nginx 1.9.3 の環境で、knife solo 経由での nginx
reload が出来なくなっていました(Chef のバージョンは 12.4.1)。
サーバの CI では nginx start のみが実行され、nginx restart は実行
されないため、気づけなかったようです。
レシピは至って普通。
service 'nginx' do
action [:enable, :start]
supports status: true, restart: true, reload: true
end
template '/etc/nginx/sites-available/masutaka.net' do
notifies :reload, 'service[nginx]'
end
/var/chef/cache/chef-stacktrace.out にはこんなエラーが。
Generated at 2015-07-26 01:10:55 +0900
---- Begin output of /sbin/reload nginx ----
STDOUT:
STDERR: reload: Job is not running: nginx
---- End output of /sbin/reload nginx ----
Ran /sbin/reload nginx returned 1
実際、そうなりました。よく分かりません。
$ sudo /sbin/reload nginx; echo $?
reload: Job is not running: nginx
1
/etc/init.d/nginx reload はできるので、レシピをこのように変更して
解決出来ました。
service 'nginx' do
provider Chef::Provider::Service::Debian
action [:enable, :start]
supports status: true, restart: true, reload: true
end
/sbin/reload nginx が使われていたということは、
Chef::Provider::Service::Upstart
が選択されていたのかな。
Chef::Provider::Service::Debian
については
Chef::Provider::Service::Init
を継承し、/usr/sbin/update-rc.d 系の
コマンドを使うことまでは分かりましたが、その辺無知なのでよく分かり
ません。
Chef::Provider::Service はいろいろあるみたいです。
https://github.com/chef/chef/tree/12.4.1/lib/chef/provider/service