This module solves the problem of configuring a service to automatically restart itself in case the service fails or dies. In Windows this is called "Service Recovery" or "Service Failure" and can be found in the Service configuration dialog under the "Recovery" tab. On Linux systems this is simply a parameter on the service unit file in SystemD.
On Linux, this module changes the SystemD unit file for the service specified,
adding the Restart=
and RestartSec=
parameters.
On Windows, this module configures the Service Recovery (Service Failure) options using
the CLI command sc.exe
.
This module uses the new Puppet Resource API.
In Puppet >= 6
the Resource API is included with the agent and server installations.
If you're running Puppet <= 5
then you'll need to install the Resource API using
the puppetlabs/resource_api
module
on the forge.
Basic usage to enable automatic restarts of a service in a cross-plaform way (works for SystemD and Windows):
service_autorestart::generic { 'myservice': }
This will declare the appropriate resources to configure service autorestart depending on
your OS. It will also automatically declare the correct notify and require relationships
depending on the OS so that things happen in the right order. Example: on Windows the service
resource must exist. On Linux the SystemD unit file must exist and we must then invoke
systemctl daemon-reload
after making our change (requires the use of camptocamp/sytemd
module
by default).
The service_autorestart::generic
resource provides basic configuration for enabling the
automatic restart capability of a service when it fails. It is intentionally limited on
options. If you need to tweak settings, please declare one of the OS specific resources.
service_autorestart::generic { 'myservice': }
Basic usage, configure auto-restart for the Puppet service
service_autorestart::systemd { 'puppet': }
Customize the delay between restarts
service_autorestart::systemd { 'myservice':
delay => '90s',
}
Customize the path and when action restarts
service_autorestart::systemd { nginx':
path => '/usr/local/lib/systemd/system/nginx.service',
value => 'on-abort',
delay => '90s',
}
Disable auto-notify relationships
service_autorestart::systemd { 'puppet':
autonotify_path => false,
autonotify_systemctl_daemon_reload => false,
}
Basic usage, auto-restart the Puppet service
service_autorestart::windows { 'puppet': }
Delay restarting the service for 60 seconds.
service_autorestart::windows { 'puppet':
delay => 60000, # delay is in milliseconds
}
Reboot the computer when the service fails
service_autorestart::windows { 'myservice':
action => 'reboot',
reboot_message => 'service "myservice" failed, rebooting',
}
Run a command when the service fails
service_autorestart::windows { 'myservice':
action => 'run_command',
command => 'msg "myservice failed, showing a popup so you know"',
}
Apart from the high-level defines for Windows auto-restarts, we also provide a resource
service_recovery
to control all aspects of Windows Service Recovery in a fine-grained way:
service_recovery { 'myservice':
reboot_message => "Rebooting because 'myservice' failed",
command => 'msg "myservice failed, showing a popup so you know"',
failure_actions => [
{
action => 'restart',
delay => 60000,
},
{
action => 'reboot',
delay => 120000,
},
{
action => 'run_command',
delay => 180000,
},
],
}
For more details on this resource and the options see REFERENCE.md.