分布式爬虫需要多机器配置,又懒得每台机器都去登录配置环境,于是用了Ansible,相当方便。关于一个playbook配置执行多个tasks,分享一波。
  • 网上充斥各种教程,都是让你这么来执行多个tasks:task list中的各任务按次序逐个在hosts中指定的所有主机上执行即在所有主机上完成第一个任务后再开始第二个。在运行自下而下某playbook时如果中途发生错误所有已执行任务都将回滚因此在更正playbook后重新执行一次即可
1
2
3
4
5
6
tasks:
- name: echo date
command: echo "date"
tasks:
- name: echo date_output
command: echo "date_output"
  • 然而并不能按照上面的说法来依次执行,这种写法只会报个WARNING,然后只执行最后一个tasks:
1
[WARNING]: While constructing a mapping from /opt/ansible/test.yaml, line 1, column 2, found a duplicate dict key (tasks).  Using last defined value only.
  • playbook在同一个指定操作的远程主机并不能顺序执行多个tasks。正确的写法,应该是把命令全部写在一个tasks里,like this:
1
2
3
4
5
tasks:
- name: echo date
command: echo "date"
- name: echo date_output
command: echo "date_output"
  • 在多个指定操作的远程主机可以顺序执行多个tasks:
1
2
3
4
5
6
7
8
9
- hosts: webservers   #指定操作的远程主机 
tasks:
- name: echo date
command: echo "date"

- hosts: dbservers #另一组远程主机
tasks:
- name: echo date_output
command: echo "date_output"
参考链接: