2

我是 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 秒后发生),在远程机器上使用异步我的进程也会继续运行。

但是,一旦我的剧本退出,远程主机终端上的 run.sh 也会启动该进程。

谁能解释发生了什么以及我在这里缺少什么。

谢谢。

4

3 回答 3

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}}
于 2015-05-25T11:55:59.893 回答
4

给异步更长的时间,比如 6 个月或一年甚至更长,这应该没问题。或者将此过程转换为 initscript 并使用服务模块。

并添加民意调查:0

于 2013-10-07T01:32:53.097 回答
2

我同意。由于它运行时间很长,我将其称为服务并像这样运行它。只需创建一个 init.d 脚本,使用“副本”将其推出,然后运行该服务。

于 2013-10-08T21:39:41.500 回答