当前位置:网站首页>shell脚本专题(07):文件由cfs到bos
shell脚本专题(07):文件由cfs到bos
2022-08-01 18:46:00 【51CTO】
一、背景
生产上每天会产生数千个音频文件,大小有几个G。这些文件存放在cfs内,由于cfs使用费用较高,容量较小,需要定期手动转移至空间更大费用更小的bos内。本程序就是将手动操作改为自动化方式。涉及日志输出、文件比对、文件复制、文件删除、监控告警等。
二、名词解释
cfs:文件储存CFS是文件以及协议存储,可以理解为是更高一级的对象储存BOS,文件储存CFS不能做计算,只是网关协议存储,在图片及文件的读写、和安全上级别更高。
bos:对象储存BOS类似于百度云盘,不过是企业级的,对象储存BOS提供一个简单的 Web 服务接口,可用于存储和提取任意数量的数据。
cfs供多台服务器共享使用,使用费用比bos高很多。
三、程序工作逻辑
每天产生的大部分音频文件存放在以日期为名字的目录内,该目录还有一层子目录xxdata,小部分录音文件存放在这个子目录内。首先将n天前的cfs日期目录复制到bos,然后比对是否一致,比对包含md5和diff以及文件数量比较,若都一致则删除原cfs录音文件目录,若有一项不一致则退出,最后通过微信发出成功的通知或失败的告警。
四、日志说明
程序每一步操作都有详细的日志记录,包括源文件目录和目标目录是否存在、复制了哪些文件、删除了哪些文件、md5生成和比对、哪些操作失败了等。程序正常运行或者运行失败都能通过日志定位查看。
五、各模块介绍
本程序共有9个模块,下面一一介绍
1.日志模块logs_bak

本程序共有4个日志,分别是all:记录本程序执行过程中的所有动作;alter:只记录各步骤出错内容,如果成功的话该日志为空;cron:记录每天定时任务执行情况;md5:记录md5生成和比对。
除了cron日志外,其它三个日志在程序运行的时候会以日期割接备份。
2.目录检查模块file_check
检查源文件目录SOURCE_PATH和备份目录DEST_PATH是否存在,因为有可能出现cfs或者bos挂载失败的问题。若路径都在则继续否则报错并退出。
运行日志截图:

3.生成源文件md5值模块md5_a
获取日期目录第一层的音频文件列表并生成md5文件md5_a.txt,该文件在复制到bos后进行md5比对时会用到。若正常生成该文件则继续,否则写入告警日志并退出。
运行日志截图:


4.生成源文件md5值模块md5_b
获取日期目录第二层的录音文件列表并生成md5文件md5_b.txt,该文件在复制到bos后进行md5比对时会用到。若正常生成该文件则继续,否则写入告警日志并退出。
运行日志截图:


5.文件复制模块file_cp
通过cp命令将录音文件由cfs复制到bos,复制过程中详细记录日志。若成功复制则继续,否则写入告警日志并退出。
运行日志截图:

6.md5比较模块diff_md5_a
在bos的首层目标目录运行’md5sum -c md5_a.txt’进行第一层的录音文件md5比对,若比对正常则继续,否则写入告警日志并退出。
运行日志截图:

7.md5比较模块diff_md5_b
在bos的第二层目标目录运行’md5sum -c md5_b.txt’进行第二层的录音文件md5比对,若比对正常则继续,否则写入告警日志并退出。
运行日志截图:

8.源文件删除模块org_file_rm
自动化删除源录音文件前会进行首层和第二层的diff比对以及源和目标文件个数的比对,若这三个条件都满足则继续,若一个不满足则写入告警日志并退出。
运行日志截图:


9.告警或通知模块
通过spug平台自定义脚本发出告警或者通知消息

若告警日志为空则发出通知消息’the files ${DATE} copy sucessed’,若不为空则发出告警内容。
告警或通知微信截图:

spug平台详见: 自动化运维平台Spug测试
六、运行方式
本程序采用定时任务方式运行,每天凌晨1点开始。
运行日志截图:

更多shell文章详见: shell脚本专题
边栏推荐
- AIOps智能运维的领跑者擎创科技正式入驻InfoQ 写作社区!
- Stop using MySQL online DDL
- A simple Flask PIN
- 在Map传值与对象传值中模糊查询
- MySQL database - stored procedures and functions
- opencv syntax Mat type summary
- 【Day_10 0428】密码强度等级
- When compiling a program with boost library with VS2013, it prompts fatal error C1001: An internal error occurred in the compiler
- 【全民编程】《软件编程-讲课视频》【零基础入门到实战应用】
- XML配置
猜你喜欢

云原生全景图详解

B011 - 51-based multifunctional fingerprint smart lock

Leetcode73. Matrix Zeroing

在表格数据上,为什么基于树的模型仍然优于深度学习?

Leetcode71. Simplified Paths

三种方案解决:npm WARN config global --global, --local are deprecated. Use --location=global instead.

OpenCV installation, QT, VS configuration project settings

明尼苏达大学团队结合高通量实验与机器学习,实现有效可预测的特定位点重组过程,可调节基因编辑速度

电商库存系统的防超卖和高并发扣减方案

硬件大熊原创合集(2022/07更新)
随机推荐
opencv如何实现图像倾斜校正
The XML configuration
log factory (detail)
想随时、随地、随心使用数据库的朋友们,全体注意!
EpiSci|片上系统的深度强化学习:神话与现实
【无标题】setInterval和setTimeout详解
What is the JVM runtime data area and the JMM memory model
如何记录分析你的炼丹流程—可视化神器Wandb使用笔记【1】
Map by value
AntDB database appeared in the 24th high-speed exhibition, helping smart high-speed innovative applications
【Day_10 0428】井字棋
The function realization of the national standard GB28181 protocol EasyGBS platform compatible with the old version of the inflow port
LeetCode 0152. Product Maximum Subarray: dp + Roll in Place
Leetcode74. 搜索二维矩阵
QPalette palette, frame color fill
483-82 (23, 239, 450, 113)
Hardware Bear Original Collection (Updated 2022/07)
【Day_12 0507】二进制插入
Zabbix6.0钉钉机器人告警
Industry Salon Phase II丨How to enable chemical companies to reduce costs and increase efficiency through supply chain digital business collaboration?