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"
ただし、クラスター全体で特定のプロセスのインスタンスを1つだけ持つ必要があります。つまり。 somewhereを実行している限り、およびクラスター内にそのようなプロセスが1つしかない限りanywhereであれば、どのホストでも実行できます。
Ansibleプレイブックでこれを行う便利な方法はありますか?
run_once
パラメータ http://docs.ansible.com/ansible/playbooks_delegation.html#run-once で説明されているように、タスクはバッチの最初のホストでのみ実行されます。順序を指定できないことを考慮に入れてください、しかしそれはどういうわけか「予測可能」です(詳細は https://github.com/ansible/ansible/issues/10964 で)