右往左往ブログ

日々よりみち

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)