首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ansible中是否有用于在远程节点上运行远程命令的特殊命令?

问Ansible中是否有用于在远程节点上运行远程命令的特殊命令?
EN

Stack Overflow用户
提问于 2017-05-02 13:42:46
回答 2查看 2.7K关注 0票数 0

我试着在主节点上执行这个

代码语言:javascript
复制
ansible all -m shell -a "/bin/ping -c3 `hostname`"

而不是敲击远程主机名,而是敲击主节点

主节点主机名=主节点

远程节点主机名=从节点

上面的命令执行以下操作

代码语言:javascript
复制
/bin/ping -c3 Master (instead of /bin/ping -c3 Slave)

请建议如何在Ansible中实现这一点。

EN

回答 2

Stack Overflow用户

发布于 2017-05-02 14:47:57

如果您像这样回引hostname:hostname,那么它是一个将在本地主机上执行的命令。如果您真的想在远程主机上执行它,请使用inventory_hostname

尝试:

代码语言:javascript
复制
ansible all -m shell -a "/bin/ping -c3 {{inventory_hostname}}"

如果要在目标主机中执行hostname,则转义backquote,使其不被本地计算机上的shell解释。

代码语言:javascript
复制
ansible all -m shell -a "/bin/ping -c3 \`hostname\`"
票数 2
EN

Stack Overflow用户

发布于 2017-05-02 15:31:55

添加到helloV答案中,虽然inventory_hostname是从库存文件中提取的,但您可能还需要查看

  • {{ ansible_nodename }} -主机名,系统报告它
  • {{ ansible_hostname }} -非限定主机名,它在第一个句点(.)之前显示字符串

如果您真的想使用hostname命令的输出而不是ansible收集的事实,则应该在命令中使用单引号,如下所示

代码语言:javascript
复制
ansible all -m shell -a '/bin/ping -c3 `hostname`'

单引号将保留传递给远程主机的确切语法,而当您使用双引号时,表达式将在主节点上计算,然后再传递给托管主机。

有关未来的参考,请参阅Difference between single and double quotes in Bash。

另外,请使用$(command)语法而不是`command`,请参见https://unix.stackexchange.com/questions/126927/have-backticks-i-e-cmd-in-sh-shells-been-deprecated

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43739483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档