1-Ansible登录到远程主机时使用哪个shell?
https://askubuntu.com/questions/937354/track-logins-made-via-non-interactive-shells/937716?noredirect=1#comment1486867_937716
2 -如果我在剧本中有10个任务,那么ansible使与远程主机的连接达到10次,或者使用单个连接执行所有这10个任务?
3-如果我在2个主机上运行10个任务,
它将首先在主机1上执行然后在主机2上执行
,然后在主机1上然后在主机2上执行第二个任务,
..
。依此类推,
。
那么,这两个主机的连接也持续存在吗?它首先连接到主机1,运行任务1,然后断开连接,然后连接到主机2,运行任务1,然后断开连接?
#1 楼
无法回答1(除非另有说明,我一直认为它只使用默认的/ bin / sh?)。它将使连接超过10次。一个任务通常会具有一个SCP或SFTP连接,以复制将被远程执行的任务文件,然后是另一个连接以触发脚本。您可以通过使用-vvv运行剧本来监视这种情况,例如: >
默认情况下,Ansible将在所有主机上并发执行任务,直到配置的派生最大数量为止。因此,它将在两个主机上都运行任务1,然后将在两个主机上都运行任务2,等等。在ansible.cfg中定义了fork,默认值为5。将此变量更改为更大的数字或将其注释掉:
ansible-playbook deploy_app.yml -u maplebird -vvv
或者,您也可以在运行剧本时通过在剧本中指定
serial
选项来进行滚动批处理。这只会为您定义的许多主机同时执行任务。假设您要针对5台主机运行一本剧本,并设置了串行选项。如果serial = 1,它将一次运行完整的Playbook 1主机。如果serial = 2,它将运行主机1和2,然后运行主机2和3,然后运行主机5。示例:
forks = 5
更多阅读:
串行(滚动)剧本运行:
http://docs.ansible.com/ansible/latest/playbooks_delegation.html#rolling-update-batch-大小
叉子:
http://docs.ansible.com/ansible/latest/intro_configuration.html#forks
希望这会有所帮助。
评论
IIRC,ansible使用ssh复用,因此对于所有任务,它不应该是到远程主机的单一连接吗?
–heemayl
17年7月25日在8:49
#2 楼
(1)Ansible使用哪个shell?Ansible默认使用
/bin/sh
。在包括RHEL / CentOS在内的许多* nix系统上,/bin/sh
是bash
-但是,在Ubuntu / Debian上是dash
,这是更为基本的内容。可以使用ansible.cfg中的executable = /bin/bash
config选项更改此设置,还可以在清单中设置ansible_shell_type。 但是在实践中(在Ansible 2.2.2及更高版本上),我和其他人发现在
executable
中设置ansible.cfg
不起作用(无论是否在become
模式下)。一种行之有效的方法,但确实意味着每项任务需要更多代码,请编写以下代码:
如果需要使用
hello from /bin/bash
,rvm
,rbenv
或需要以前版本的pyenv
的类似工具(与交互式shell一起使用),则需要在外壳任务中使用包装脚本或调用bash。 #3 楼
默认情况下,Shell模块使用/ bin / sh,但是您可以在全局配置中或在Playbook的本地设置可执行文件。 .html
评论
通常,如果每个问题只问一个问题,那么Stack Exchange平台的效果最好。确实是的 !但是,由于这些问题很少,而且只涉及一个主题,因此我将它们组合在一起。
请不要在将来合并任何问题,这将使回答和阅读整个问答集变得更加困难。问题1与其他两个问题并没有真正的联系。