使用 Ansible 在特定时间调度命令



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

sudo at 2:30

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

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

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

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

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

有很多方法可以实现这一点。

以下是其中的几个:

  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. 在模块上修改以支持与count/unit相当exact_time参数。
    将其另存为./library/at.py靠近剧本。
    应用它以在远程服务器上的确切时间计划作业。

最新更新