当前位置:网站首页>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脚本专题
边栏推荐
- How to use the Golang coroutine scheduler scheduler
- QT_QDialog dialog
- 7月30号|来一场手把手助您打造智能视觉新爆款的技术动手实验
- WinRAR | Generate multiple installers into one installer
- 消息模板占位符的使用
- 直播系统聊天技术(八):vivo直播系统中IM消息模块的架构实践
- Topology Parts Disassembly 3D Visualization Solution
- University of California | Inverse Reinforcement Learning from Different Third-Person Videos via Graph Abstraction
- 【Day_09 0427】走方格的方案数
- opencv如何实现图像倾斜校正
猜你喜欢
随机推荐
关于单应性矩阵的若干思考
【Day_09 0427】 另类加法
AntDB database appeared in the 24th high-speed exhibition, helping smart high-speed innovative applications
Golang协程调度器scheduler怎么使用
直播系统聊天技术(八):vivo直播系统中IM消息模块的架构实践
EpiSci|片上系统的深度强化学习:神话与现实
成都理工大学&电子科技大学|用于强化学习的域自适应状态表示对齐
EpiSci | Deep Reinforcement Learning for SoCs: Myth and Reality
请你说说多线程
typora操作手册
No need to crack, install Visual Studio 2013 Community Edition on the official website
屏:全贴合工艺之GFF、OGS、Oncell、Incell
Leetcode74. Search 2D Matrix
生命周期和作用域
QT commonly used global macro definitions
Live chat system technology (8) : vivo live IM message module architecture practice in the system
AIOps智能运维的领跑者擎创科技正式入驻InfoQ 写作社区!
Stop using MySQL online DDL
How to use the Golang coroutine scheduler scheduler
How many steps does it take to convert an ENS domain name into music?








