title: chef-solo hangs at the end installing redis
body: <p>chef-solo hangs at the end when installing redis as if chef is waiting for some event to occur. Here is output when I had to kill it with ctrl+c.</p>
  
  <p>[2013-05-14T15:55:27+00:00] ERROR: Running exception handlers<br>
  [2013-05-14T15:55:27+00:00] ERROR: Exception handlers complete
  Chef Client failed. 8 resources updated <br>
  [2013-05-14T15:55:27+00:00] FATAL: Stacktrace dumped to /home/ubuntu/cache/chef-stacktrace.out
  [2013-05-14T15:55:27+00:00] FATAL: Chef::Exceptions::MultipleFailures: Multiple failures occurred:<br>
  * SystemExit occurred in chef run: service[redis] (redis::default line 107) had an error: SystemExit: exit<br>
  * Chef::Exceptions::Exec occurred in delayed notification: service[redis] (redis::default line 83) had an error: Chef::Exceptions::Exec: /sbin/start redis returned 1, expected 0<br></p>
  
  <p>I am new to chef and unable to figure out why this is happening. Has anyone noticed this behaviour before? </p>
  
  <p>Here is my recipe file</p>
  
  <pre><code>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 &lt;&lt;-EOH
      tar zxf redis-2.6.10.tar.gz
      cd redis-2.6.10
      make &amp;&amp; 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 =&gt; "compile_redis_source")
    supports :restart =&gt; true, :start =&gt; true, :stop =&gt; 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 =&gt; "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 =&gt; "redis")
  end
  
  service "redis" do
    action [:enable, :start]
  end
  </code></pre>
  
  <p>There are 2 service "redis" resource statements, is that a problem? or how does chef workout in this case, does it merge into a single resource when running? <br>
  <br>
  I am using upstart and here is the redis.upstart.conf.erb file. Not sure if anything is wrong with this. Does the order of the statement matter in this file?</p>
  
  <pre><code>#!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
  </code></pre>