如何从crontab执行ansible playbook?

时间:2016-09-08 19:06:02

标签: ansible

是否可以从crontab执行ansible playbook?我们有一个需要在某一天的某个时间运行的剧本,但我知道cron不喜欢ssh。

Tower有一个内置的调度引擎,但我们对使用Tower不感兴趣。其他人如何安排ansible playbooks?

5 个答案:

答案 0 :(得分:9)

您可以使用cron作业来运行您的剧本 Ansible调用带有-tt开关的ssh来强制TTY,所以它应该工作得很好 请检查以下内容:

  • 作业用户可以访问ssh私钥
  • 工作环境正确(PYTHONPATH等......)
  • 主机上没有包装混合物(例如,通过pip和apt同时安装的ansible)

另请在ansible中查看有关quiet选项缺席的this方便评论:

  

crontab有一个技巧:运行ansible-playbook如下:

*/15 * * * *    if ! out=`ansible-playbook yourplaybook.yaml`; then echo $out; fi
  

这样您就可以得到完整的输出,但只有当ansible退出时才会出现非零状态。

答案 1 :(得分:0)

您可以使用Konstantin Suvorov来实现his answer中提到的相同行为croncape

*/15 * * * *    croncape ansible-playbook yourplaybook.yaml

答案 2 :(得分:0)

它也将起作用,我正在使用它来检查代理状态并在停止时启动它。

*/5 * * * * ansible-playbook -i /root/playbooks/agent /root/playbooks/agent.yml


答案 3 :(得分:0)

我们既可以作为konstantin-suvorov的答案,也可以作为

类型

# whereis ansible-playbook
  /usr/bin/ansible-playbook

并使用输出中显示的路径

我们可以在crontab中运行它

#crontab -e


*/15 * * * * /usr/bin/ansible-playbook /home/user1/yourplaybook.yml

它像魅力一样工作

答案 4 :(得分:0)

我们可以在bash中创建包装脚本,如下所示

ANSIBLE_PLAYBOOK=`which ansible_playbook`
cd main_dir_where_playbook_is_located
$ANSIBLE_PLAYBOOK playbook.yaml > log_file

将以上内容保存为run.sh并像普通cron一样安排它。