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

时间:2017-01-20 09:38:47

标签: linux bash ansible ansible-playbook

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

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

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

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

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

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

P.S。我想手动完成此过程而不将其委托给cronjob的原因是因为我想事先查看将要升级的软件包及其更改日志。这成了我星期五的惯例。

1 个答案:

答案 0 :(得分:1)

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

以下是其中几个:

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

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

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