让日志清理自己跑起来:Ansible、Cron和远程SSH自动化实战
前言服务器日志最容易被忽视也最容易出问题。平时它只是安静地写入文件等到磁盘空间被吃满、服务开始异常、告警半夜响起时才发现某个目录里的日志已经堆了很久。如果只有一台机器手动清理还能勉强处理一旦服务器数量变多再靠人工登录、查目录、执行命令就会变得很不可靠。更麻烦的是日志清理看似简单真到生产环境里误删文件、清错目录、漏掉机器都会带来新的风险。这篇文章会用Ansible和Cron搭建一套基础的日志自动清理方案。Ansible负责把清理动作标准化统一下发到目标服务器Cron负责按固定时间执行任务让清理不再依赖人工记忆和临时操作。文章中会先在CentOS 7上安装Ansible并通过模拟脚本持续向/ceshi/1.log写入日志制造一个可验证的清理场景。随后配置Ansible hosts文件编写Playbook将目标机器上的日志文件内容清空并通过执行结果确认任务是否生效。最后再通过 cpolar 配置SSH公网TCP访问让原本藏在内网里的服务器也可以被Ansible控制端连接。这样即使目标机器没有公网IP也能纳入统一的日志清理流程。1.什么是Ansible为何选择AnsibleAnsible是一款开源的自动化运维工具旨在简化配置管理、应用部署、任务编排和IT编排等操作。其核心设计理念是“简单、可靠、无侵入”通过声明式语言实现对大规模基础设施的高效管控。在传统运维模式下面对数百台服务器的批量操作往往依赖脚本循环执行SSH命令不仅效率低下还难以保证执行的一致性与可追溯性。Ansible的出现有效解决了这一痛点使运维人员能够以一条命令完成跨节点的标准化操作。核心优势无代理架构Ansible无需在目标主机上安装额外客户端或代理程序仅依赖标准SSH服务即可完成通信与指令下发。这显著降低了系统开销与维护复杂度同时避免了因中心化代理服务故障导致的全局性风险。基于SSH的安全通信利用成熟的SSH协议进行连接天然支持密钥认证、跳板机、堡垒机等企业级安全策略确保操作过程的安全合规。幂等性保障Ansible的模块设计遵循幂等原则——无论Playbook被执行多少次系统最终状态始终保持一致。这一特性对于生产环境中的配置修复、状态校验和持续同步至关重要。YAML驱动的声明式语法使用结构清晰、易于阅读的YAML格式编写Playbook大幅降低学习成本提升协作效率与可维护性。丰富的模块生态Ansible内置数千个模块覆盖操作系统、网络设备、数据库、中间件及主流云平台支持从基础资源管理到复杂业务编排的全场景自动化需求。凭借上述特性Ansible已成为DevOps实践中广泛采用的自动化引擎助力企业实现高效、可靠、可重复的基础设施即代码管理。2.在Centos7上安装ansible更新所有系统软件包yum update-y安装EPEL仓库提供 Ansible 包yuminstall-yepel-release安装ansbile验证是否安装成功ansible--version3.模拟大量日志输入在另一台机器创造/ceshi/1.log文件用于案例清空日志mkdir/ceshicd/ceshitouch1.log写一个简单、高效的 Shell 脚本用于持续向 1.log 文件追加内容viwrite_log.sh#!/bin/bashLOG_FILE1.logINTERVAL1# 每隔多少秒写入一次可修改# 捕获 CtrlC 信号优雅退出trapecho -e \n停止写入日志...; exit 0SIGINTecho开始向$LOG_FILE持续写入日志按 CtrlC 停止...whiletrue;do# 写入当前时间 自定义信息echo$(date%Y-%m-%d %H:%M:%S)- 这是一条自动写入的日志消息$LOG_FILE# 可选写入随机数、进程ID等取消注释即可# echo $(date): Random$(shuf -i 1-100 -n 1), PID$$ $LOG_FILEsleep$INTERVALdone给脚本执行权限chmodx write_log.sh运行脚本./write_log.sh停止按Ctrl C日志模拟成功啦通过它的不断插入我们可以看出来日志占比容量也是不断增加的时间久了就会有很大的负担对此别急ansible来帮助你4.配置ansible自动化脚本确保你在playbook所在目录假设是 /etc/ansiblecd/etc/ansible编辑hosts文件加入你所要监控的ip和他的用户名及密码[test] ip ansible_ssh_user用户名 ansible_ssh_pass密码使用Ansible编写一个YAML文件用于自动清理指定服务器上的/ceshi/1.log文件。以下是完整 cleanup.yml示例--- - name: 清空 /ceshi/1.log 文件内容 hosts: dbservers become:yestasks: - name: 清空 /ceshi/1.log 文件 copy: content:dest: /ceshi/1.log mode:0644register: result - name: 输出操作结果 debug: msg:/ceshi/1.log 文件内容已被清空when: result.changed然后使用ansible-playbook执行就好啦ansible-playbook-ihosts4.yml接下来我们去目标主机查看一下/ceshi/1.log是否清理成功我这里是192.168.42.146我们可以看到该目录已经清除成功~手动反复执行未免繁琐不如为4.yml配置定时任务实现定时执行自动清理。5.结合cron定时清理添加定时任务crontab查看ansible-playbook路径:whichansible-playbook编辑root用户的定时任务crontab-e添加一行每天02:00执行02* * * /usr/bin/ansible-playbook-i/etc/ansible/hosts /etc/ansible/4.yml/etc/ansible/ansible_cleanup.log21如图可以看出本来目标地址的1.log文件是有内容的经过定时执行ansible的配置文件4.yml文件后目标地址的1.log文件被清空在传统运维中手动清理日志不仅繁琐还容易遗漏。借助Ansible Cron我们已能实现本地服务器日志的全自动清空而当你的服务部署在内网、无公网IP时cpolar成了打通自动化“最后一公里”的关键——通过cpolar建立安全隧道Ansible控制端可远程访问内网主机即使身处异地也能让定时清理任务精准执行。从此无论服务器藏得多深日志清理都能准时、静默、可靠地完成。6.安装cpolar实现随时随地开发6.1 什么是cpolarcpolar是一款安全高效的内网穿透工具无需公网IP或复杂配置只需一条命令即可将本地服务器、Web服务或任意端口映射到公网让你随时随地远程访问内网应用特别适合开发调试、远程运维和应急部署等场景。6.2 部署cpolarcpolar 可以将你本地电脑中的服务如 SSH、Web、数据库映射到公网。即使你在家里或外出时也可以通过公网地址连接回本地运行的开发环境。❤️以下是安装cpolar步骤使用一键脚本安装命令sudocurlhttps://get.cpolar.sh|sh安装完成后执行下方命令查看cpolar服务状态如图所示即为正常启动sudosystemctl status cpolarCpolar安装和成功启动服务后在浏览器上输入虚拟机主机IP加9200端口即:【http://ip:9200】访问Cpolar管理界面使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可打开浏览器访问本地9200端口使用cpolar账户密码登录即可,登录后即可对隧道进行管理。7.配置公网地址通过配置你可以在本地 WSL 或 Linux 系统上运行 SSH 服务并通过 Cpolar 将其映射到公网从而实现从任意设备远程连接开发环境的目的。隧道名称可自定义本例使用了:ssh注意不要与已有的隧道名称重复协议tcp本地地址22端口类型随机临时TCP端口地区China Top创建成功后打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址接下来就可以在其他电脑或者移动端设备异地上使用任意一个地址在终端中访问即可。tcp 表示使用的协议类型2.tcp.cpolar.top是 Cpolar 提供的域名10807是随机分配的公网端口号通过 Cpolar 提供的公网地址和端口就可以使用ansible进行远程部署啦接下来我们操作一下。修改hosts配置文件[dbservers]2.tcp.cpolar.topansible_userrootansible_port10807ansible_password***接下来我们执行配置文件ansible-playbook-ihosts4.yml执行成功我们去对应主机查看/ceshi/1.log是否清除成功8.保留固定TCP公网地址使用cpolar为其配置TCP地址该地址为固定地址不会随机变化。选择区域和描述有一个下拉菜单当前选择的是“China VIP”。右侧输入框用于填写描述信息。保留按钮在右侧有一个橙色的“保留”按钮点击该按钮可以保留所选的TCP地址。列表中显示了一条已保留的TCP地址记录。地区显示为“China Top”。地址显示为“5.tcp.cpolar.top:13501”。登录cpolar web UI管理界面点击左侧仪表盘的隧道管理——隧道列表找到所要配置的隧道ssh点击右侧的编辑。修改隧道信息将保留成功的TCP端口配置到隧道中。端口类型选择固定TCP端口预留的TCP地址填写保留成功的TCP地址点击更新。创建完成后打开在线隧道列表此时可以看到随机的公网地址已经发生变化地址名称也变成了保留和固定的TCP地址。这样我们的ansible操作就没有任何的阻碍啦总结完成配置后日志清理就不再是临时救火操作。Ansible负责统一执行Cron负责定时触发清理动作可以按固定规则自动运行减少人工遗漏也让多台服务器的处理方式保持一致。这套方案的价值在于把“人肉运维”变成可重复、可检查的自动化流程。Playbook写清楚要处理哪个文件、以什么权限执行、执行后输出什么结果后续排查时也能从日志中看到任务是否按计划运行。配置 cpolar 后内网服务器的SSH端口可以通过公网TCP地址访问。随机TCP地址适合临时测试固定TCP地址更适合长期纳入Ansible inventory避免连接端口变化导致任务失败。需要注意的是日志清理一定要谨慎。真实环境中不建议直接使用高风险删除命令最好先从清空指定测试文件、按时间归档、限制目录范围开始SSH连接也应优先使用密钥认证、最小权限账号和必要的访问控制不要长期暴露弱密码登录入口。Ansible负责批量执行Cron负责自动调度cpolar负责打通内网连接。当这几部分组合起来以后日志清理就能从“想起来才处理”变成稳定、安静、可审计的日常运维动作。