0

シェフが何らかのイベントが発生するのを待っているかのように、redis をインストールするときに、chef-solo が最後にハングします。これは、ctrl+c で kill しなければならなかったときの出力です。

[2013-05-14T15:55:27+00:00] エラー: 例外ハンドラーを実行しています
[2013-05-14T15:55:27+00:00] エラー: 例外ハンドラーが完了しました Chef Client が失敗しました。8 個のリソースが更新されました
[2013-05-14T15:55:27+00:00] 致命的: スタックトレースが /home/ubuntu/cache/chef-stacktrace.out にダンプされました [2013-05-14T15:55:27+00:00] FATAL: Chef::Exceptions::MultipleFailures: 複数の障害が発生しました:
* Chef の実行で SystemExit が発生しました: service[redis] (redis::default 行 107) でエラーが発生しました: SystemExit: exit
* Chef::Exceptions::Exec が発生しました通知の遅延: サービス [redis] (redis::default 行 83) にエラーが発生しました: Chef::Exceptions::Exec: /sbin/start redis が 1 を返し、0 が予想されました

私はシェフが初めてで、なぜこれが起こっているのか理解できません。以前にこの動作に気づいた人はいますか?

ここに私のレシピファイルがあります

package "build-essential" do
  action :install
end

user node[:redis][:user] do
  action :create
  system true
  shell "/bin/false"
end

directory node[:redis][:dir] do
  owner node[:redis][:user]
  group node[:redis][:user]
  mode "0755"
  action :create
end

directory node[:redis][:data_dir] do
  owner node[:redis][:user]
  group node[:redis][:user]
  mode "0755"
  action :create
end

directory node[:redis][:log_dir] do
  owner node[:redis][:user]
  group node[:redis][:user]
  mode "0755"
  action :create
end

remote_file "#{Chef::Config[:file_cache_path]}/redis-2.6.10.tar.gz" do
  source "http://redis.googlecode.com/files/redis-2.6.10.tar.gz"
  action :create_if_missing
end

# Adding 'make test' causes the install to freeze for some reason.
bash "compile_redis_source" do
  cwd Chef::Config[:file_cache_path]
  code <<-EOH
    tar zxf redis-2.6.10.tar.gz
    cd redis-2.6.10
    make && sudo make install
    # to give permissions to the executables that it copied to.
    chown -R redis:redis /usr/local/bin
  EOH
  creates "/usr/local/bin/redis-server"
end

service "redis" do
  provider Chef::Provider::Service::Upstart
  subscribes :restart, resources(:bash => "compile_redis_source")
  supports :restart => true, :start => true, :stop => true
end

template "redis.conf" do
  path "#{node[:redis][:dir]}/redis.conf"
  source "redis.conf.erb"
  owner node[:redis][:user]
  group node[:redis][:user]
  mode "0644"
  notifies :restart, resources(:service => "redis")
end

template "redis.upstart.conf" do
  path "/etc/init/redis.conf"
  source "redis.upstart.conf.erb"
  owner node[:redis][:user]
  group node[:redis][:user]
  mode "0644"
  notifies :restart, resources(:service => "redis")
end

service "redis" do
  action [:enable, :start]
end

2 つのサービス「redis」リソース ステートメントがありますが、それは問題ですか? または、この場合、シェフのワークアウトはどのように実行されますか?実行時に単一のリソースにマージされますか?

私は upstart を使用しています。ここに redis.upstart.conf.erb ファイルがあります。これに何か問題があるかどうかはわかりません。このファイルでは、ステートメントの順序は重要ですか?

#!upstart
description "Redis Server"
emits redis-server

# run when the local FS becomes available
start on local-filesystems
stop on shutdown

setuid redis
setgid redis
expect fork

# Respawn unless redis dies 10 times in 5 seconds
#respawn
#respawn limit 10 5

# start a default instance
instance $NAME
env NAME=redis
#instance $NAME

# run redis as the correct user
#setuid redis
#setgid redis

# run redis with the correct config file for this instance
exec /usr/local/bin/redis-server /etc/redis/redis.conf

respawn
#respawn limit 10 5
4

2 に答える 2

0

redis は起動に失敗しているのではなく、フォアグラウンドで実行されているだけです。

私が使用していたRedisクックブックの1つで同様の問題がありました。redis.conf.erbファイルには構成オプションがありました

daemonize no

他の一部のクックブックでは、このオプションを属性で構成できます。したがって、修正は使用しているクックブックによって異なります。ファイルを編集するredis.conf.erbか、その属性の構成方法を見つけて に設定しますyes

于 2013-05-22T02:33:53.517 に答える