如何使用ansible运行二进制可执行文件并使其保持运行?我可以使用命令/ shell模块来执行此操作吗?

时间:2017-02-18 19:41:08

标签: ansible

我有一个可执行文件说:carbonserver。我需要运行它并保持运行,以便api可以与它进行交互。

1 个答案:

答案 0 :(得分:4)

如果这是一个真正的服务,那么我会将任务委托给系统的服务处理程序而不是ansible。在大多数现代Linux发行版中,这通常是systemd,所以我会创建一个生成新systemd单元文件的模板,然后使用ansible的systemd模块启动它:

templates/carbonserver.service.j2

[Unit]
Description=Carbon Server

[Service]
ExecStart=/usr/bin/carbonserver

[Install]
WantedBy=multi-user.target

剧本:

- template:
    src: templates/carbonserver.service.j2
    dest: /etc/systemd/system/carbonserver.service
    owner: bin
    group: wheel
    mode: 0644

- systemd:
    name: carbonserver
    state: started
    enabled: True

如果您的服务器是您希望系统自己管理的内容,则这是首选方法。例如,如果它停止或死亡,您可以配置systemd以再次启动它。您还可以将其配置为在系统启动时自动启动等。

如果您的Linux发行版不支持systemd,或者您希望在其他类型的计算机(OSX或Windows)上运行它,那么您可能需要使用特定操作系统自己的服务机制来执行此操作。

但是,如果您只想使用ansible运行一次,并且只想让它在后台运行(并且不关心它是否会死亡等),那么您可以尝试其他一些:

- shell: "( ( nohup /usr/bin/carbonserver 1>/dev/null 2>&1 ) & )"
  async: 5
  poll: 0

这在后台运行一个通用shell命令,确保它在ansible完成时不会被杀死,并在后台完成所有操作,因此下一个任务可以立即运行。请注意,如果您真的不关心您的服务运行,这只是一种可行的方法,这很可能不是您想要的