Управление сервисами — одно из основополагающих требований для любого пользователя. С такими инструментами, как Systemd, которые используются во всех основных дистрибутивах Linux, очень важно понимать, как управлять службами.
В этой статье вы научитесь использовать модуль Ansible systemd для запуска, остановки и управления службами на любом хосте, использующем службу Systemd Init.
Первый шаг — установить и настроить Ansible в вашей системе. В этом примере мы запускаем Ansible в системе Debian 11.
Начните с обновления репозиториев программного обеспечения и установки Ansible:
sudo apt-get update sudo apt-get install ansible -y
После установки мы можем настроить удаленные хосты для управления с помощью узла управления Ansible.
Откройте терминал и отредактируйте файл инвентаризации, как показано в следующей команде:
sudo vim /etc/ansible/hosts
В файле инвентаризации хостов добавьте IP-адреса удаленных хостов, которыми вы хотите управлять с помощью Ansible.
Следующим шагом будет создание пары ключей SSH. Это позволяет вам войти на удаленный хост с вашего узла управления Ansible без необходимости вводить пароль.
Начните с генерации ключа SSH с помощью команды:
$ ssh-keygen
Следуйте подсказкам команды ssh-keygen, чтобы сгенерировать пару открытого и закрытого ключей.
После завершения используйте команду ssh-copy-id, чтобы скопировать открытый ключ SSH на удаленный хост.
Пример команды такой, как показано:
ssh-copy-id -i ~/.ssh/id_rsa.pub ubuntu@192.168.100.17
Замените имя пользователя и пароль удаленным пользователем и IP-адресом удаленного хоста.
Затем введите пароль для входа на удаленный хост и загрузите пару ключей SSH.
После завершения подключитесь к удаленному хосту по SSH, и вы войдете в систему без запроса пароля.
Чтобы управлять службами на удаленном хосте с помощью модуля systemd, убедитесь, что служба Systemd и системный менеджер управляют удаленным хостом.
Модуль systemd является частью ядра Ansible и по умолчанию доступен во всех установках Ansible.
Давайте рассмотрим несколько примеров использования модуля systemd для управления службами на удаленных хостах.
Модуль systemd в Ansible прост в использовании. Например, чтобы запустить службу, передайте имя службы и состояние, в котором вы хотите, чтобы она была запущена.
В следующем примере сценария показано, как запустить службу с помощью модуля systemd.
--- - name: Ansible start service hosts: all gather_facts: true tasks: - name: Start a service with systemd systemd: name: apache2 state: started
В приведенном выше примере playbook запустит HTTP-сервер Apache2 с помощью systemd.
Убедитесь, что целевая служба установлена и управляется systemd на удаленном хосте, что позволяет избежать ошибок.
Если служба не существует, Ansible выдаст ошибку, как показано на скриншоте ниже:
При остановке служб измените параметр состояния на остановлено, как показано в примере ниже:
--- - name: Ansible stop services hosts: all gather_facts: true tasks: - name: Stop a service with systemd systemd: name: apache2 state: stopped
После успешного выполнения целевая служба на удаленном хосте будет остановлена.
Чтобы перезагрузить службу с помощью systemd, установите состояние reload. Приятно знать, что вы можете использовать полное или сокращенное название службы, как мы это делали в предыдущих руководствах.
Например:
--- - name: Ansible reload a service hosts: all gather_facts: true tasks: - name: Reload services with systemd systemd: name: nginx.service state: reloaded
В приведенном выше примере будет перезагружена служба Nginx, как передано в playbook.
В случаях, когда вам нужно запустить службу при загрузке системы, необходимо убедиться, что служба включена.
Модуль Ansible systemd предоставляет вам параметр enabled, который вы можете использовать, чтобы разрешить запуск службы при запуске системы.
Рассмотрим пример сценария, показанный ниже:
--- - name: Ansible enable service hosts: all gather_facts: true tasks: - name: Enable nginx service systemd: name: nginx.service enabled: true masked: no
Приведенный выше сценарий включает службу Nginx и гарантирует, что она не замаскирована.
Вы также можете использовать параметр with_items для управления несколькими службами. Например, чтобы запускать сразу несколько сервисов, мы можем создать playbook как:
--- - name: Ansible start services hosts: all gather_facts: true tasks: - name: Start these services systemd: name: "{{ item }}" state: started with_items: - apache2 - mysql - redis-server
В приведенном выше примере playbook необходимо перезапустить службы в блоке with_items.
В этой статье показано, как управлять службами на удаленных хостах с помощью модуля Systemd в Ansible.