需求背景
对接客户中某个上游为外包系统,外包系统每日推送压缩文件至指定文件夹下,文件格式为YYYYMMDD_RegReport.zip。由于每日采集文件,无法对接压缩包内文件,需要将推送的压缩文件每日解压为文件夹
需求分析
与客户沟通后,需求内容如下,
压缩包解析后放在当前目录下即可
解压后文件保留
多次推送特殊情况可以手动解压,
当天晚上推送当天的文件如20231010推送的文件夹为20231010__RegReport.zip
处理方案
这里显然需要处理俩件事情,解压至指定文件夹和定时调度处理。
解压
格式为zip,就用简单的unzip命令,这里唯一比较麻烦的地方就是,每日推送是根据日期做推送,所以需要考虑每日不同的压缩包名称,这里用linux自带的时间做每日匹配
#将压缩文件 YYYYMMDD_RegReport.zip 在指定目录 /tmp下解压缩,如果已有相同的文件存在,要求 unzip 命令不覆盖原先的文件
unzip -n $(date +%Y%m%d_RegReport.zip) -d /tmp
LINUX定时调度处理
Linux crontab 是用来定期执行程序的命令。
当安装完成操作系统之后,默认便会启动此任务调度命令。
crond 命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。
PS:这一块在我理解就是,linux自带了调度器,调度通过corn表达式来做定时调度。
具体步骤
开启 crond 服务(定时任务)
启动服务:
systemctl start crond
添加、查看定时任务
创建定时任务文件夹
mkdir /home/tybs/scheduledUnzipFile
传入定时任务文件,脚本内容如下(内部文件夹名称和cron表达式需要自行配制)
* * * * * sh /home/tybs/corntest/scheduledUnzip.sh
使用 crontab 添加定时任务,命令如下
crontab /home/tybs/scheduledUnzipFile/scheduledUnzip.cron
查看定时任务是否添加成功
crontab -l
若有如下展示则证明添加成功
添加解压缩脚本
创建解压缩执行脚本,传入解压缩脚本,脚本内容如下(文件夹目录自行补充。若有删除原先文件或指定目录请自行补充)
unzip $(date +%Y%m%d_RegReport.zip)
验证方案
查看压缩包是否被解压缩成功
查看定时任务执行日志
通过root用户进行查询定时任务执行日志
tail -300f /var/log/cron
可通过执行记录判断脚本是否正常被调用
若有报错则提示在日志内部,请根据报错解决问题
参考了许多博客才做出这么简单的东西,感谢曾经的前行者。
LINUX定时任务实现方案
Linux crontab 命令
踏实一些,不要着急,你想要的,岁月都会给你!小吴加油