Ansible可以很容易地确保每个主机上都运行一个进程。
我可以做这样的事情:
--- - hosts: app_cluster tasks: - name: Look for the "foo" process shell: ps -ef | grep foo | grep -v grep register: process_list changed_when: false - name: Start "foo" if needed shell: nohup /bin/foo & when: "process_list.stdout.find('foo') == -1"
但是,我需要在整个集群中只有一个特定进程的实例。 IE浏览器。 它可以在任何主机上运行,只要它在某处运行,只要群集中的任何地方只有一个这样的进程。
可能有一个方便的方法来做到这一点在一个合理的剧本?
您可以使用http://docs.ansible.com/ansible/playbooks_delegation.html#run-once中所述的run_once参数,以便该任务仅在批处理的第一个主机中运行。 考虑到你不能指定顺序,但它是某种“可预测的”(更多信息在https://github.com/ansible/ansible/issues/10964 )