繁体   English   中英

Ansible 命令,Shell 模块不执行脚本

[英]Ansible Command, Shell modules not executing script

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

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

下面列出了剧本任务:

贝壳

- 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}}"

我遇到了同样的问题。 我有一个简单的脚本来启动一个 java 程序。 shell 和命令模块的工作非常不稳定。 那就是有时java程序启动成功,有时什么都没有。 即使 ansible rc status 显示为 0 (这是成功的退出代码)。 我什至把 echo "Hello" >> output.log 作为我脚本的第一行,以检查脚本是否真的被选中运行。 但是,即使这样也没有打印出来。但是,没有打印任何错误,并且 ansible 模块退出状态 (rc) 为 0。此外,请务必也查看stderr 有时,即使rc可能为 0,但stderr可能有一些信息

经过大量的头发撕裂后,我可以设法解决我的问题。 我将 java 程序作为“sudo”运行。我从脚本中删除了 sudo,并将其作为“become”指令放入剧本中 - 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模块。

{{tomcat_dir}} 的值是否以“/”开头? 如果没有,那么它将尝试使用相对于使用 ssh 连接到远程主机的任何用户的主目录的指定路径来执行命令。

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

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

关于“服务”模块的更多细节在这里

当然,服务名称可能不同,比如 tomcat6 或 tomcat7 或其他什么,但我希望你明白要点。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM