Table of Contents
Go from Ansible beginner to Ansible pro with this full video course.
What does the Ansible service
module do?
Ansible’s service
module controls services on remote hosts and is useful for these common tasks:
- Start, stop or restart a service on a remote host
- name: ensure nginx service is started
service:
name: nginx
state: started
become: true
- name: ensure nginx service is stopped
service:
name: nginx
state: stopped
become: true
- name: restart the nginx service
service:
name: nginx
state: restarted
become: true
- Ensure that a service is started on system boot
- name: ensure nginx service is started and also starts on boot
service:
name: nginx
state: started
enabled: true
become: true
You will usually need to set become: true
when using the service module because root
or superuser
permissions are required when managing services on most systems.
The service
module supports BSD init, OpenRC, SysV, Solaris SMF, systemd, upstart.
Examples
How to start a service
Set the name
parameter to the service name and the state
parameter to started
to start a service. If the service is already running, Ansible will do nothing.
- name: ensure nginx service is started
service:
name: nginx
state: started
become: true
How to stop a service
Set the name
parameter to the service name and the state
parameter to stopped
to stop a service. If the service is not running, Ansible will do nothing.
- name: ensure nginx service is stopped
service:
name: nginx
state: stopped
become: true
How to restart a service
Set the name
parameter to the service name and the state
parameter to restarted
to restart a service.
- name: restart the nginx service
service:
name: nginx
state: restarted
become: true
How to restart multiple services in a loop
Use the loop
keyword and {{ item }}
to restart multiple services in a loop.
- name: restart multiple services in a loop
service:
name: "{{ item }}"
state: started
enabled: true
become: true
loop:
- nginx
- rsyslog
How to ensure a service starts on boot/reboot
Set the name
parameter to the service name and the enabled
parameter to true
to ensure a service starts on system boot/reboot. It’s possible to set the state
and enabled
parameters at the same time.
- name: ensure nginx service is started and also starts on boot/reboot
service:
name: nginx
state: started
enabled: true
become: true
How to capture service
module output
Use the register
keyword to capture the output of the service
module.
- name: ensure nginx service is started and also starts on boot
service:
name: nginx
state: started
enabled: true
become: true
register: service_output
- debug: var=service_output
The debug
task above will output the following:
ok: [123.123.123.123] => {
"service_output": {
"changed": true,
"enabled": true,
"failed": false,
"name": "nginx",
"state": "started",
"status": {...}
}
}
How to capture service
module output from a loop
When using the service
module in a loop, the output of each item in the loop will go into the results
key of the registered variable.
- name: restart multiple services in a loop
service:
name: "{{ item }}"
state: started
enabled: true
become: true
register: service_output
loop:
- nginx
- rsyslog
- debug: var=service_output
ok: [123.123.123.123] => {
"service_output": {
"changed": false,
"msg": "All items completed",
"results": [
{
...
"changed": false,
"enabled": true,
"failed": false,
"invocation": {...},
"item": "nginx",
"name": "nginx",
"state": "started",
"status": {...}
},
{
...
"changed": false,
"enabled": true,
"failed": false,
"invocation": {...},
"item": "rsyslog",
"name": "rsyslog",
"state": "started",
"status": {...}
}
]
}
}
Further reading
Ansible service
Module on Ansible Docs