【问题标题】:Schedule command at specific time with Ansible使用 Ansible 在特定时间安排命令
【发布时间】:2017-01-20 09:38:46
【问题描述】:

所以我已经通过手动登录和使用每周升级我的服务器一段时间了

sudo at 2:30

此命令提示我要在夜间 2:30 执行的命令。命令是:

apt-get update
apt-get dist-upgrade -y -qq
reboot

如何将其移至 Ansible 剧本?我已经查看了他们的“at”模块,但它只允许我相对于当前时间(现在 + 时间)而不是在特定时间安排命令。 (source)

另一种选择是在剧本中创建一个原始任务,但我将如何处理at 命令是交互式的这一事实?

附:我想手动完成此过程而不是将其委托给 cronjob 的原因是因为我想事先查看将要升级的软件包及其更改日志。这成了我周五的例行公事。

【问题讨论】:

  • 据我所知,您有相互冲突的要求:“有时通过 Ansible 运行”(即自动)和“我想查看要升级的软件包”(即手动)。
  • 顺便说一句,你看到wiki.debian.org/UnattendedUpgrades了吗?
  • 我不希望升级自动运行。 Ansible playbook 只是为了方便起见,所以我不必自己登录服务器并输入这些命令。 apt 报告在每个星期五早上发送到我的电子邮件中,我从中查看更改,然后继续安排升级。

标签: linux bash ansible ansible-playbook


【解决方案1】:

有很多方法可以实现。

这里有几个:

  1. 制作一个包含要执行的命令的脚本。
    使用copy 模块上传。
    使用command模块执行at -f myscript 2:30
    这会将您的命令添加到目标主机的队列中。

  2. 使用 apt 模块而不是您的 shell 命令制作 Ansible 剧本。
    在单个服务器上进行测试。
    使用at 2:30 将其安排在您的本地机器(Ansible 控制主机)上,
    提供 ansible-playbook -i allservers upgrade-servers.yml 作为工作。
    这将在 2:30 从您的本地计算机上在所有服务器上执行您的剧本。

  3. 修改at模块以支持exact_time参数与count/unit相同。
    在您的剧本附近将其另存为 ./library/at.py
    将其应用于在远程服务器上的准确时间安排作业。

【讨论】:

  • 谢谢!我希望有一个更简单的解决方案。但我想我只需要努力并修改 at 模块以支持精确时间。
  • 所以这是modified at.py module,它支持所有时间表达式,而不仅仅是'now +'。
猜你喜欢
  • 2017-08-29
  • 1970-01-01
  • 2018-10-26
  • 1970-01-01
  • 2011-08-09
  • 2016-08-18
  • 2019-06-03
  • 2015-06-22
  • 1970-01-01
相关资源
最近更新 更多