首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ansible-远程执行脚本

场景

在批量管理主机的时候,希望批量执行一个脚本,这个脚本只执行一次,就不想把脚本放到远程机器上了,这时候就可以使用script模块进行操作。

用法

ansible [ip/hostname] -m script -a [args]

常用参数

chdir参数 : 此参数的作用就是指定一个远程主机中的目录,在执行对应的脚本之前,会先进入到 chdir 参数指定的目录中。

creates参数 :使用此参数指定一个远程主机中的文件,当指定的文件存在时,就不执行对应脚本,可参考 command 模块中的解释。

removes参数 :使用此参数指定一个远程主机中的文件,当指定的文件不存在时,就不执行对应脚本,可参考 command 模块中的解释。

例子

脚本内容(1.sh)

#!/bin/bash

echo "start ..."

pwd

sleep 10

pwd

mkdir aa

echo "end ..."

直接执行

ansible 192.168.57.102 -m script -a '1.sh'

192.168.57.102 | CHANGED => {

"changed": true,

"rc": 0,

"stderr": "Shared connection to 192.168.57.102 closed.\r\n",

"stderr_lines": [

"Shared connection to 192.168.57.102 closed."

],

"stdout": "start ...\r\n/root\r\n/root\r\nend ...\r\n",

"stdout_lines": [

"start ...",

"/root",

"/root",

"end ..."

]

}

可以看到,默认工作目录是到用户的家目录

切换目录执行

ansible 192.168.57.102 -m script -a 'chdir=/tmp/ 1.sh'

192.168.57.102 | CHANGED => {

"changed": true,

"rc": 0,

"stderr": "Shared connection to 192.168.57.102 closed.\r\n",

"stderr_lines": [

"Shared connection to 192.168.57.102 closed."

],

"stdout": "start ...\r\n/tmp\r\n/tmp\r\nend ...\r\n",

"stdout_lines": [

"start ...",

"/tmp",

"/tmp",

"end ..."

]

}

判断目录或者文件是否存在,存在就不执行,不存在就执行

ansible 192.168.57.102 -m script -a 'creates=/tmp/aa chdir=/tmp/ chdir=/tmp 1.sh'

192.168.57.102 | CHANGED => {

"changed": true,

"rc": 0,

"stderr": "Shared connection to 192.168.57.102 closed.\r\n",

"stderr_lines": [

"Shared connection to 192.168.57.102 closed."

],

"stdout": "start ...\r\n/tmp\r\n/tmp\r\nend ...\r\n",

"stdout_lines": [

"start ...",

"/tmp",

"/tmp",

"end ..."

]

}

上一个执行脚本创建了/tmp/aa的目录,存在这个目录就不执行了

ansible 192.168.57.102 -m script -a 'creates=/tmp/aa chdir=/tmp/ chdir=/tmp 1.sh'

192.168.57.102 | SKIPPED

判断目录或者文件是否存在,存在就执行,不存在就不执行

ansible 192.168.57.102 -m script -a 'removes=/tmp/aa chdir=/tmp/ chdir=/tmp 1.sh'

192.168.57.102 | CHANGED => {

"changed": true,

"rc": 0,

"stderr": "Shared connection to 192.168.57.102 closed.\r\n",

"stderr_lines": [

"Shared connection to 192.168.57.102 closed."

],

"stdout": "start ...\r\n/tmp\r\n/tmp\r\nend ...\r\n",

"stdout_lines": [

"start ...",

"/tmp",

"/tmp",

"end ..."

]

}

总结

其实ansible在执行过程中也是有文件拷贝的,只是这个执行文件是拷贝到临时目录,执行完以后就自动删除了,对于一下存放密码的脚本相对比较安全。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190924A0NL3O00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券