2016-02-27 54 views
4

我刚开始使用Ansible,并且在运行服务器时遇到问题。与Ansible一起运行服务器

我有一台服务器可以使用java -jar target/server-1.0-SNAPSHOT.jar启动。但是,这将启动服务器并保持运行永远显示输出,所以Ansible永远不会结束。

这是我尝试从未完成:

- name: Start server 
    command: chdir=~/server java -jar target/server-1.0-SNAPSHOT.jar 

什么是做到这一点的正确方法?

+1

您应该创建一个启动脚本(与Ansible无关)。 Debian中的init.d脚本或CentoOS中的systemd服务脚本。然后,您可以使用Ansible的“服务”模块来启动/停止/重新启动您的服务。 – udondan

+0

不是一个干净的选择:使用'shell'模块并将该命令放在后台,另外从shell中分离出来。 – heemayl

回答

3

请按照@udondan的建议创建服务,或使用异步任务启动服务器。 http://docs.ansible.com/ansible/playbooks_async.html

+3

异步可以工作,但不是像@maeh所说的那样,是“正确”的方式。异步任务非常适合在游戏结束时完成的任务;使用它来启动服务器/守护进程绝对不是。 – tedder42

2

如@Petro026建议,您的选择是异步任务或创建服务。

我强烈建议对异步任务的方法。这是一个非常脆弱的解决方案:

  • 如果主机重新启动会怎么样?
  • 如果你运行你的剧本两次会怎么样?
  • 如果你的服务器应用程序刚刚死亡怎么办?

最好的办法是为它创建一个服务,可能是它的最简单的方法将涉及使用的过程控制系统,如supervisord,这是由ansible支持。

文档:

主管是一个客户机/服务器系统,它允许用户监视 和控制在UNIX之类的操作系统的一些过程。

0

把它放在PID中并将输出发送到nohup。

事情是这样的:

nohup的Java的罐子目标/服务器-1.0-SNAPSHOT.jar &

在你的剧本:

  • 名称:启动服务器 命令:CHDIR =〜/server nohup java -jar target/server-1.0-SNAPSHOT.jar &

如果你想杀死进程kill -9 #numerofpid。