【问题标题】:Is using nohup with shell (or command) module in ansible idempotent?在 ansible 幂等中使用 nohup 和 shell(或命令)模块吗?
【发布时间】:2016-06-29 06:59:05
【问题描述】:

我正在编写一个类似于以下内容的 ansible 任务,

- name: Start daemon
  shell: nohup myexeprogram arg1 arg2 &

(参考:https://stackoverflow.com/a/29818158/198660

上面的任务是幂等的吗?即重复运行它最终会在系统上创建多个myexeprogram 实例还是只会创建一个?

如果前者(即为每个任务运行创建一个新实例),是否可以使用该任务编写一个具有幂等性的剧本?也许在开始新实例之前对任何现有实例运行某种搜索和终止命令?示例(ansible 任务)将不胜感激。

背景:我正在尝试在 centos7 系统上使用 ansible 设置 prometheus 服务器。

【问题讨论】:

  • 为 prometheus 服务编写一个单元文件,并将服务模块与 Ansible 一起使用会更好。
  • @knowhy ansible 的服务模块主要是围绕 prometheus 支持的 systemv 构建的,但是 centos7 已经从它转移到 systemd,所以使用服务模块对我来说不是一个选项。
  • 我还没有查看代码。我从来没有遇到过服务模块和 systemd 的问题。我只需要一次daemon-reload 的命令模块来激活单元文件。该模块支持 Systemd。

标签: ansible nohup idempotent


【解决方案1】:

不,这个任务不会是幂等的。它会在每次运行时生成一个新实例。

您可以通过使用另一个任务来检查现有正在运行的进程并在此任务上使用“何时”条件来避免在进程已在运行时运行,从而使其具有幂等性。

也就是说,守护程序并使用“服务”模块是比使用命令和 nohup 更好的模式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    相关资源
    最近更新 更多