я использовал sh /usr/local/jboss/bin/domain.sh
вручную, и jboss работает нормально.
Когда я использую ansible для автоматического запуска jboss, журнал jboss всегда показывает "Container is down
".
файл /root/startup_jboss.sh
:
#!/bin/bash
/bin/sh /usr/local/jboss/bin/domain.sh &
Мой startup.yml
:
---
- name: Tranfser and Execute a script
hosts: AuditReport
tasks:
- name: Tranfser the scipt
command: chdir=/root /bin/sh startup_jboss.sh
Не знаю почему?
Кто-нибудь может мне помочь?
Спасибо.
С уважением, облако
Возникшая ошибка связана с тем, что контекст выполнения domain.sh
Сценарий отличается, когда вы вошли в систему и когда он удаленно выполняется Ansible. Посмотри это ТАК вопрос Больше подробностей.
Вам необходимо заполнить /root/startup_jboss.sh
скрипт с пропущенными переменными окружения для правильной работы. Вы можете протестировать его в тех же условиях, что и ansible, с помощью удаленной команды SSH:
ssh root@<your node> /root/startup_jboss.sh
Вы может используйте Ansible для выполнения сценария оболочки на удаленном сервере, но я не думаю, что это правильное решение в вашем случае использования.
Ansible - это инструмент управления конфигурацией, предназначенный для описания желаемые состояния для ваших ресурсов (файлов, процессов, прав, ...) и убедитесь, что идемпотентность (вносятся только необходимые изменения, вы можете запускать свой скрипт несколько раз, и вы всегда получаете то же самое штат). В вашем случае вы хотите, чтобы JBoss работал в доменном режиме на вашем удаленном сервере. Я бы решил, как бы инкапсулировать domain.sh
сценарий внутри в этом скрипт, чтобы он работал как служба и в конечном итоге настроить эту службу для запуска при запуске сервера. Я не знаю, какой у вас дистрибутив linux, но вы можете посмотреть Вот для примера init.d
скрипт для Debian.
В твоем startup.yml
playbook, вы сначала скопируете init.d
скрипт, а затем убедитесь, что ваша служба запущена (Ansible предоставляет собственный модуль для управления сервисами).