使用 Ansible 在特定时间安排命令

Schedule command at specific time with Ansible

所以我通过手动登录和使用

每周升级我的服务器一段时间了
sudo at 2:30

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

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

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

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

P.S。我想手动完成此过程而不是将其委派给 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. 修改 at 模块以支持与 count/unit.
    相同的 exact_time 参数 在您的剧本附近将其保存为 ./library/at.py
    应用它在远程服务器上准确地安排作业。