用户名
Email
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
帖子
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
数据库
›
SQL-Server
›
Ansible实战:怎样正确选择 command 和shell模块? ...
Ansible实战:怎样正确选择 command 和shell模块?
杀鸡焉用牛刀
论坛元老
|
2025-1-18 09:43:18
|
显示全部楼层
|
阅读模式
楼主
主题
1899
|
帖子
1899
|
积分
5697
在利用Ansible举行自动化
运维
时,command 和 shell 模块是我们执行命令的好帮手。虽然它们看起来很相似,但在功能特性和适用场景上其实有着明显的差别。正确选择合适的模块不仅能够提高任务的服从,还能帮助我们规避一些潜在的风险。在这篇文章中,我们将深入探讨 command和shell模块之间的差异,并通过一些高级案例来展示怎样恰当地选择和利用它们。
两者模块的区别
特性commad模块shell模块解析方式不利用shell解析利用完整的shell 解析支持特性不支持管道重定向、管道等shell 功能安全性更安全,防止命令注入存在命令注入风险,必要严格验证输入适用场景执行简单命令,如ls、mkdir等执行复杂命令或必要shell功能的场景
常见场景及模块选择
执行简单命令
适合场景:执行单一命令,无需复杂的shell功能。
推荐模块
:command
示例
:在远程主机上创建目录
ansible -m node2 command -a 'mkdir -p /tmp/node1'
复制代码
以下述命令是通过ad-hoc方式创建,简单的命令用这种方式很方便。执行成功如所示:
root@ansible:~# ansible node2 -m command -a 'mkdir -p /tmp/node2'
192.168.31.102 | CHANGED | rc=0 >>
root@ansible:~# ansible node2 -m command -a 'ls /tmp'
192.168.31.102 | CHANGED | rc=0 >>
....
node2
.....
复制代码
以下方式通过剧本方式创建:
---
- name: 使用command模块创建目录
hosts: node2
gather_facts: yes
tasks:
- name: 使用command模块创建目录
command: mkdir -p /tmp/mydir
复制代码
通过ansible-playbook执行成功,输出如下图所示:
利用管道或重定向
适合场景:必要利用shell特性(如管道、重定向)处理复杂逻辑。
推荐模块
:shell
示例
:统计日记文件中包罗 error 的行数
root@ansible:~/test# ansible node2 -m shell -a 'grep 'error' /var/log/dmesg | wc -l'
192.168.31.102 | CHANGED | rc=0 >>
0
复制代码
---
- name: 使用shell模块统计日志中的错误行数
hosts: node2
tasks:
- name: 使用shell模块统计日志中的错误行数
shell: grep 'error' /var/log/messages | wc -l
register: error_count
- name: 打印错误行数
ansible.builtin.debug:
msg: "日志中包含的错误行数为:{{ error_count.stdout }}"
复制代码
通过ansible-playbook执行成功,输出如下图所示:
动态变量更换
适合场景:必要解析变量或动态天生命令。
推荐模块
:shell
示例
:获取当前主机名并打印
---
- name: 获取主机名
hosts: node2
tasks:
- name: 获取主机名
ansible.builtin.shell: hostname
register: hostname_output
- name: 打印主机名
ansible.builtin.debug:
msg: "当前主机名为:{{ hostname_output.stdout }}"
复制代码
定期备份数据库
需求
:通过cron任务,每日备份数据库并压缩备份文件。
利用
shell
模块
:
ansible node2 -m shell -a \
"mysqldump -u root -p'password' mydatabase | gzip > /backups/mydatabase_$(date +'%Y%m%d').sql.gz"
复制代码
说明
:shell 模块支持日期命令 $(date),可以动态天生文件名。
清算大文件
需求
:删除 /var/log/ 目录中凌驾 100M 的文件。
利用
shell
模块
:
ansible node2 -m shell -a "find /var/log/ -type f -size +100M -exec rm -f {} \;"
复制代码
说明
:find 命令必要团结-exec,只能用shell 模块完成。
监控服务状态
需求
:检查远程主机上的Nginx服务是否正在运行。
利用
command
模块
:
ansible node2 -m command -a "systemctl is-active nginx"
复制代码
总结
优先利用command模块
:
假如命令可以通过 command 模块实现,优先选择它以确保安全性。
适时利用shell模块
:
当任务必要利用管道、重定向、情况变量或命令更换时,选择shell模块。
通过公道选择和利用command与 shell 模块,可以高效完成复杂任务,同时确保系统安全性。希望本文的解析与案例能帮助你在Ansible自动化管理中更加得心应手!
推荐阅读
运维
服从倍增!Ansible Copy 模块必知必会操作
怎样在Ansible中轻松实现复杂SSH跳转?这个参数搞定
Ansible Setup模块实战,怎样利用Setup模块网络主机信息
从入门到醒目:Ansible Shell 模块的应用与最佳实践
深入了解Ansible设置与主机清单:轻松管理自动化任务
服从提拔神器:Ansible入门,开启自动化
运维
之旅
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
杀鸡焉用牛刀
论坛元老
这个人很懒什么都没写!
楼主热帖
ElasticSearch-高级查询
手把手带你通过API创建一个loT边缘应用 ...
一、kotlin基础语法学习
第4章 复合类型
背八股文的都是什么水平
揭秘 ChunJun:如何实现 e2e&session ...
Apache Hudi 在袋鼠云数据湖平台的设计 ...
开源轻量级工作流WorkflowCore介绍 ...
生产事故-记一次特殊的OOM排查 ...
源码解析 Handler 面试宝典
标签云
集成商
AI
运维
CIO
存储
服务器
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表