【问题标题】:chef-solo hangs at the end installing redischef-solo 在安装 redis 的最后挂起
【发布时间】:2014-08-01 19:29:16
【问题描述】:

在安装 redis 时,chef-solo 在最后挂起,好像厨师正在等待某些事件发生。这是我不得不用 ctrl+c 杀死它时的输出。

[2013-05-14T15:55:27+00:00] 错误:运行异常处理程序
[2013-05-14T15:55:27+00:00] 错误:异常处理程序完成 厨师客户端失败。 8 个资源已更新
[2013-05-14T15:55:27+00:00] 致命:堆栈跟踪转储到 /home/ubuntu/cache/chef-stacktrace.out [2013-05-14T15:55:27+00:00] 致命:Chef::Exceptions::MultipleFailures:发生多次故障:
* 厨师运行中发生 SystemExit:service[redis](redis::default line 107)有一个错误:SystemExit: exit
* Chef::Exceptions::Exec 发生在延迟通知中:service[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”资源语句,有问题吗?或者在这种情况下厨师如何锻炼,它在运行时是否合并为单个资源?

我正在使用新贵,这里是 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

【问题讨论】:

    标签: redis chef-solo


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您的 redis 并没有启动失败,它只是在前台运行。

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

      daemonize no
      

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

      【讨论】:

      • redis server 自己启动了,但是 chef-solo 最后挂了
      • Chef-solo 没有挂,只是redis在前台运行,不释放终端。将 redis 配置更改为“daemonize yes”,看看是否有帮助。
      • 这对您找到解决方案有帮助吗?如果可以,请您接受我的回答。或者提供一些细节你是如何修复它的?谢谢。
      • redis 在后台运行,但终端没有释放。我必须使用 Ctrl+C 才能出来。 'daemonize yes' 已经在 redis.conf.erb 文件中设置好了。
      • daemonize no 是必需的,因此 init 可以管理该过程。如果你设置daemonize yes,虽然它不会在启动时“挂起”,但你不能使用stop或使用service命令或/etc/init.d/redis-server脚本检查它的status
      猜你喜欢
      • 1970-01-01
      • 2012-08-29
      • 1970-01-01
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-16
      相关资源
      最近更新 更多