Запустить службу systemd после завершения выполнения ansible playbook

Мы запускаем ansible playbook при каждой загрузке, и он выполняет множество проверок и задач настройки на хосте. У нас также есть несколько сервисов systemd, которые необходимо запускать на этом хосте. Как мне сделать эти службы зависимыми от завершения доступного playbook? Я хочу, чтобы эти службы запускались только после завершения выполнения моего доступного playbook. Есть ли какой-либо прямой способ в systemd установить эту зависимость, или я должен написать какой-нибудь файл по пути после завершения и использовать это как проверку в моем служебном файле systemd? Пожалуйста, дайте мне знать, если у вас есть лучший способ сделать это.

0
задан 4 November 2020 в 20:11
3 ответа

Создайте выпадающие модули для определений модулей служб, которые вы хотите запустить после вашего сценария.

drop-ins - это файлы, которые заменяют директивы в исходном определении модуля. Они принадлежат каталогам со схемой / etc / systemd / system / .service.d .

Для конкретного примера давайте воспользуемся apache.

Сначала вам нужно выяснить, текущая After = строка определения модуля. Вы можете найти определение модуля, запустив systemctl status :

$ systemctl status apache2
* apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)

Теперь давайте взглянем на /lib/systemd/system/apache2.service :

[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target

The После строки = мы хотим изменить.

Затем мы создаем каталог для файлов drop-in (вы могли бы создать его автоматически с помощью sudo systemctl edit apache2.service , но я хочу, чтобы вы знали, как это работает):

sudo mkdir /etc/systemd/system/apache2.service.d

В этот каталог вы можете поместить одну или несколько папок в файлах.

sudo vi /etc/systemd/system/apache2.service.d/10-after-ansible.conf

Это падение в файле тогда содержит только строки, которые мы хотим переопределить:

[Unit]
After=network.target remote-fs.target nss-lookup.target my-ansible-script.service

Сохраните файл и systemd перезагрузит определения служб:

sudo systemctl daemon-reload

С этого момента служба apache2 будет запускаться только после выполнения my-ansible-script .

Вы можете добавить Requires = в том же файле, если необходимо.

0
ответ дан 4 January 2021 в 09:23

Мне кажется, что было бы проще запустить эти службы в конце сборника сценариев Ansible, чем пытаться реализовать это в systemd. Я бы просто добавил:

- name: start service
  service:
     name: service_name
     state: started

в конец сборника пьес. Ansible дает сбой быстро, поэтому, когда эта задача находится в конце игры, обеспечивается выполнение остальных задач.

2
ответ дан 4 January 2021 в 09:23

Вы можете настроить некоторые переменные, если говорите, что сценарий является общим, краткий пример:

Файл Hosts:

[t1]
host1

[t2]
host2


[t1:vars]
service=chronyd

[t2:vars]
service=ntpd


[t:children]
t1
t2

Вы запускаете его против - hosts: t , в конце игры:

- name: start specific
  service:
    name: "{{ service }}"
    state: started
0
ответ дан 4 January 2021 в 09:23

Теги

Похожие вопросы