我是Ansible的新手。我正在尝试使用非常简单的Ansible Playbook在远程主机上启动进程。
以下是我的剧本的样子
-
hosts: somehost
gather_facts: no
user: ubuntu
tasks:
- name: change directory and run jetty server
shell: cd /home/ubuntu/code; nohup ./run.sh
async: 45
run.sh使用一些参数调用java服务器进程。 我的理解是,即使在剧本完成之后,在远程机器上使用异步我的进程也会继续运行(这应该在大约45秒后发生。)
然而,只要我的Playbook退出远程主机终端上的run.sh启动的进程。
任何人都可以解释发生了什么以及我在这里缺少什么。
感谢。
答案 0 :(得分:5)
我有一个ansible playbook来部署我的Play应用程序。我使用shell的命令替换来实现这一点,它为我做了诀窍。我认为这是因为命令替换产生了一个新的子shell实例来执行命令。
-
hosts: somehost
gather_facts: no
user: ubuntu
tasks:
- name: change directory and run jetty server
shell: dummy=$(nohup /run.sh &) chdir={{/home/ubuntu/code}}
答案 1 :(得分:4)
给出更长的时间异步说6个月或一年甚至更长时间,这应该没问题。 或者将此过程转换为initscript并使用服务模块。
并添加poll:0
答案 2 :(得分:2)
我同意。由于它长期运行,我称之为服务并运行它。只需创建一个init.d脚本,用“副本”将其推出然后运行该服务。