我一直坚持这个问题一段时间了。在我的Ansible剧本中,当我尝试执行以下操作时:
- name: Start tomcat
command: "/tomcat/bin/startup.sh"
在运行playbook时,我看到它成功运行任务,但是当我尝试检查目标机器时:
ps -ef | grep tomcat
Tomcat没有运行。
我查了https://superuser.com/questions/870871/run-a-remote-script-application-in-detached-mode-in-ansible这样的问题但不确定它是如何工作的。我也从https://github.com/ansible/ansible-examples/blob/master/tomcat-standalone/roles/tomcat/files/tomcat-initscript.sh获取脚本并尝试将其作为
运行- name: Start Tomcat
script: /tmp/tomcat-initscript.sh
但没有帮助。任何指针将不胜感激。感谢。
答案 0 :(得分:4)
tomcat-initscript.sh
是一个SysV风格的init脚本;需要命令。所以你可以试试
- name: start tomcat
script: /tmp/tomcat-initscript.sh start
理想情况下,您实际上会将其复制到您的系统(可能是/etc/init.d
),因此您可以使用service
模块与其进行互动。
许多Linux系统已切换到其他init系统,因此根据您的发行版,您可能希望编写一个upstart或systemd文件(这比SysV样式的脚本简单得多)。
您没有通过发行版的软件包管理器安装tomcat吗?该软件包几乎肯定已经包含了一个init脚本。
答案 1 :(得分:1)
对我来说,解决方案是使用
command: nohup /tomcat/bin/startup.sh
答案 2 :(得分:1)
我在几个Ubuntu VM上尝试了几个选项。使用startup.sh
对我有效。
以下是我的剧本中的任务片段
- name: Start Tomcat
command: "nohup /Path_To_Catalina_Home/bin/startup.sh"
tags: startTomcat
答案 3 :(得分:0)
使用nohup帮助我在这里制作了tomcat升级脚本,因为我们仍然使用shell脚本来控制tomcat,谢谢!我添加了忽略错误,因为我的脚本还运行了一些验证。
- name: Run a script to restart tomcat
shell: nohup /shared/path/app.sh restart
ignore_errors: yes