Ansible Command,Shell模块不执行脚本

时间:2016-02-05 01:52:21

标签: bash ansible yaml

我有一个tomcat.sh,其目的是在将tomcat部署到远程主机后重新启动(停止和启动)它。

我注意到Shell和Command模块没有执行.sh文件。但是,我能够在远程主机上手动执行.sh文件作为远程用户。

Playbook任务如下:

贝壳

- name: ensures tomcat is restarted
  shell:
   "nohup {{tomcat_dir}}/apache-tomcat-{{tomcat_version}}/tomcat.sh &"

命令

- name: ensures tomcat is restarted test-test
  command: ./tomcat.sh
  args:
    chdir: "{{tomcat_dir}}/apache-tomcat-{{tomcat_version}}"

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。我有我的简单脚本应该启动一个java程序。 shell和命令模块工作非常不稳定。有时java程序成功启动,有时没有任何反应。即使ansible rc状态显示为0(这是成功的退出代码)。我甚至把回声“你好”>> output.log作为我脚本中的第一行,用于检查脚本是否实际被选中以进行运行。但是,即使这样也不会被打印出来。但是,没有任何错误被打印出来,并且ansible模块退出状态(rc)为0.此外,请务必同时查看stderr。有时,即使rc可能为0,但stderr

中可能会有一些信息

经过大量的头发撕裂,我可以设法解决我的问题。我正在运行java程序作为“sudo”。我从我的脚本中删除了sudo,并将其作为“成为”指令放在playbook中 - http://docs.ansible.com/ansible/become.html。该指令仅从ansible 2.0开始提供,因此我必须将我的ansible从1.5升级到2.0。我的剧本终于看起来像这样了

- name: Execute run.sh
    become: true 
    script: /home/vagrant/deploy/target/scripts/run.sh

脚本如下所示:

nohup java -Djava.net.preferIPv4Stack=true -Xms1048m -Xmx1048m -cp /x/y/z/1.jar com.github.binitabharati.x.Main >> output.log 2>&1 &

另请注意,我没有使用commandshell模块,而是使用了script模块。

答案 1 :(得分:0)

{{tomcat_dir}}的值是否以" /"?开头?如果没有,那么它将尝试使用指向相对于使用ssh进入远程主机的用户ansible的主目录的路径来执行命令。

顺便说一句,如果您通过包管理器安装,这可能会更容易?

- name: restart tomcat
  become: yes
  become_user: sudo
  service: name=tomcat state=restarted

关于"服务的更多细节"模块here

当然,服务名称可能会有所不同,比如tomcat6或tomcat7或者其他什么,但是我希望你能得到这个要点。

最后,如果您使用galaxy或github中的角色通过ansible安装了tomcat,那么您的角色可能会拥有可以复制的处理程序来完成此操作。