Method: Chef::Application::WindowsService#service_main

Defined in:
lib/chef/application/windows_service.rb

#service_main(*startup_parameters) ⇒ Object

[View source]

75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/chef/application/windows_service.rb', line 75

def service_main(*startup_parameters)

  while running?
    if state == RUNNING
      begin
        # Reconfigure each time through to pick up any changes in the client file
        Chef::Log.info("Reconfiguring with startup parameters")
        reconfigure(startup_parameters)

        splay = rand Chef::Config[:splay]
        Chef::Log.debug("Splay sleep #{splay} seconds")
        sleep splay

        # If we've stopped, then bail out now, instead of going on to run Chef
        next if state != RUNNING

        run_chef_client

        Chef::Log.debug("Sleeping for #{Chef::Config[:interval]} seconds")
        client_sleep Chef::Config[:interval]
      rescue Chef::Application::Wakeup => e
        Chef::Log.debug("Received Wakeup signal.  Starting run.")
        next
      rescue SystemExit => e
        raise
      rescue Exception => e
        Chef::Log.error("#{e.class}: #{e}")
        Chef::Application.debug_stacktrace(e)
        Chef::Log.error("Sleeping for #{Chef::Config[:interval]} seconds before trying again")
        client_sleep Chef::Config[:interval]
        retry
      end
    else # PAUSED or IDLE
      sleep 5
    end
  end
end