我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
我不知道为什么?
有人能帮助我吗?
谢谢。
问候,Cloud
答案1
domain.sh
您遇到的错误与以下事实有关:当您登录时和当 Ansible 远程执行脚本时,脚本的执行上下文不同。请参阅此那么问题来了更多细节。
您需要/root/startup_jboss.sh
使用缺少的环境变量完成脚本才能正常工作。您可以使用远程 SSH 命令在与 ansible 相同的条件下对其进行测试:
ssh root@<your node> /root/startup_jboss.sh
你可能使用 Ansible 在远程服务器上执行 shell 脚本,但我不认为这是您用例中的正确解决方案。
Ansible 是一个配置管理工具,旨在描述期望状态您的资源(文件、流程、权利等),并确保幂等性(只进行必要的更改,您可以多次运行脚本,并且始终获得相同的结果状态)。在您的用例中,您希望确保 JBoss 在远程服务器上以域模式运行。我解决这个问题的方法是将脚本封装domain.sh
在在里面脚本来运行它服务并最终将此服务配置为在服务器启动时运行。我不知道你的 Linux 发行版是什么,但你可以看看这里init.d
有关Debian 脚本的示例。
在你的startup.yml
剧本中,你首先要复制init.d
脚本,然后确保你的服务正在运行(Ansible 提供了一个管理服务的本机模块)。