使用ansible在远程主机上启动长时间运行的进程

时间:2013-10-06 19:28:16

标签: ansible

我是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启动的进程。

任何人都可以解释发生了什么以及我在这里缺少什么。

感谢。

3 个答案:

答案 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脚本,用“副本”将其推出然后运行该服务。