如何在重新启动流浪盒后自动启动服务?

时间:2016-03-21 01:19:51

标签: elasticsearch vagrant ansible ansible-playbook

我使用this角色安装了elasticsearch

我在剧本中执行以下步骤:

---

- hosts: master
  sudo: true
  tags: elasticsearch
  roles:
    - ansible-elasticsearch

然后是vagrant up es-test-cluster,其中es-test-cluster是我在VagrantFile中提到的VM的名称。我已经给它一个私人IP 192.162.12.14。 VM完全启动并在运行sudo service elasticsearch status后,我得到该服务正在192.162.12.14:9200上运行,这是正确的。但是,如果我运行vagrant halt es-test-cluster然后vagrant up es-test-cluster,我会看到elasticsearch服务正在运行。

我想过这样做:

---

- hosts: master
  sudo: true
  tags: elasticsearch
  roles:
    - ansible-elasticsearch
  tasks:
  - name: Starting elasticsearch service if not running
    service: name=elasticsearch state=started

但即便如此也无济于事。这只在我第一次启动时运行。

每当我运行vagrant up时,如何启动服务?

这适用于Ubuntu 14.04。

2 个答案:

答案 0 :(得分:1)

您需要“启用”该服务。这可以通过Ansible中的单个标志来完成。

---
- hosts: master
  sudo: true
  tags: elasticsearch
  roles:
    - ansible-elasticsearch
  tasks:
  - name: Starting elasticsearch service if not running
    service:
      name: elasticsearch
      state: started
      enabled: true

此外,根据您使用的ansible-elasticsearch角色,它可能已经有一个标志,您可以传递该标志以启用该服务而无需额外任务。我知道我用过的角色。

答案 1 :(得分:0)

解决方案适用于Debian软件包。 您可以在VagrantFile

中加入以下内容
config.vm.provision "shell", path: "restart_es.sh"

restart_es.sh包含:

#!/bin/bash
SERVICE=elasticsearch;
sudo update-rc.d $SERVICE defaults 95 10
if ps ax | grep -v grep | grep $SERVICE > /dev/null
then
    echo "$SERVICE service running, everything is fine"
else
    echo "$SERVICE is not running"
    sudo /etc/init.d/$SERVICE start
fi

OR

config.vm.provision "shell", path: "restart_es.sh", run: "always"

restart_es.sh包含:

#!/bin/bash
SERVICE=elasticsearch;
if ps ax | grep -v grep | grep $SERVICE > /dev/null
then
    echo "$SERVICE service running, everything is fine"
else
    echo "$SERVICE is not running"
    sudo service $SERVICE start
fi

OR

config.vm.provision "shell", inline: "sudo service elasticsearch start", run: "always"

当您重新启动流浪者框时,所有三个服务都会启动elasticsearch服务。