chef-solo挂在最后安装redis

时间:2013-05-15 06:03:00

标签: redis chef-solo

安装redis时,大厨独唱会挂起,好像厨师正在等待某些事件发生。当我不得不用ctrl + c杀死它时输出。

[2013-05-14T15:55:27 + 00:00]错误:运行异常处理程序
[2013-05-14T15:55:27 + 00:00]错误:异常处理程序完成 厨师客户失败了。 8资源更新
[2013-05-14T15:55:27 + 00:00]致命:Stacktrace转储到/home/ubuntu/cache/chef-stacktrace.out [2013-05-14T15:55:27 + 00:00]致命:Chef :: Exceptions :: MultipleFailures:发生多次故障:
*在Chef run中发生SystemExit:service [redis](redis :: default line 107)出错:SystemExit:exit
* Chef :: Exceptions :: Exec发生在延迟通知中:service [redis](redis :: default line 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

2 个答案:

答案 0 :(得分:1)

我认为Dmytro走的是正确的道路,但并不完全正确。

我看到您在Chef中使用Upstart作为服务提供商。有关任何redis-server声明,请查看expect的Upstart配置。如果那里有expect forkexpect daemon语句,则表示在启动redis-server时,Upstart将等待Redis服务分别进行一次或两次fork。如果daemonize no中有redis.conf,则Redis进程永远不会分叉,因此Upstart只会在执行init脚本时挂起。

答案 1 :(得分:0)

您的redis无法启动,它只是在前台运行。

我和我正在使用的Redis食谱之一有类似的问题。在redis.conf.erb文件中,它具有配置选项

daemonize no

其他一些烹饪书具有可通过属性配置的此选项。因此,您的修复将取决于您正在使用的食谱。编辑redis.conf.erb文件或查找该属性的配置方式,并将其设置为yes