chefでserviceを正しく管理する(kibana)
前々回、kibanaのサービスとしてkibana-daemon.rb
(を中で使っている/etc/init.d/kibana
)を使っていました。
chefで、最初にkibanaをインストールしてサービスを起動しようとしたときに、 サービスがなぜかスキップされて起動しません。recipeではちゃんと指定しています。
site-cookbooks/kibana/recipes/default.rb :
cookbook_file "/etc/init.d/kibana" do source "kibana" action :create_if_missing mode 00755 end bash "add_kibana_service" do code <<-EOL chkconfig --add kibana EOL end service "kibana" do action [:start, :enable] end
出力ログ :
Recipe: kibana::default 〜中略〜〜 * service[kibana] action start (up to date) * service[kibana] action enable (up to date)
実際に確認してみても、確かに起動していません。
$ service kibana status
kibana: no instances running
結論から言うと、戻り値が管理されていませんでした。
chefでserviceリソースを利用するときは、service <service_name> statusの戻り値を適切に管理する必要があるようです。
サービス停止状態のときは"3"を返すことで、chefは適切にサービスを管理してくれます。
というか、kibana-daemon.rb
に任せる必要すらない気がするので、statusコマンドに任せることにしました。
/etc/init.d/kibana (元々は /usr/share/kibana/sample/kibana) 変更前:
KIBANA_PATH="/usr/share/kibana" # 略 status) ruby $KIBANA_PATH/kibana-daemon.rb $1 ;;
変更後 :
KIBANA_PATH="/usr/share/kibana" . /etc/init.d/functions # 略 status) # ruby $KIBANA_PATH/kibana-daemon.rb $1 status -p ${KIBANA_PATH}/tmp/kibana.pid kibana ;;
これで動作するようになりました。
$ knife solo cook <server_name>
出力ログ :
Recipe: kibana::default 〜中略〜〜 * service[kibana] action start - start service service[kibana] * service[kibana] action enable (up to date)