• LINUX定时解压缩方案


    需求背景

    对接客户中某个上游为外包系统,外包系统每日推送压缩文件至指定文件夹下,文件格式为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
    
    • 1
    • 2

    LINUX定时调度处理

    Linux crontab 是用来定期执行程序的命令。

    当安装完成操作系统之后,默认便会启动此任务调度命令。

    crond 命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

    PS:这一块在我理解就是,linux自带了调度器,调度通过corn表达式来做定时调度。

    具体步骤

    开启 crond 服务(定时任务)
    启动服务:

    systemctl start crond
    
    • 1

    添加、查看定时任务
    创建定时任务文件夹

    mkdir /home/tybs/scheduledUnzipFile
    
    • 1

    传入定时任务文件,脚本内容如下(内部文件夹名称和cron表达式需要自行配制)

    * * * * *  sh /home/tybs/corntest/scheduledUnzip.sh
    
    • 1

    使用 crontab 添加定时任务,命令如下

    crontab  /home/tybs/scheduledUnzipFile/scheduledUnzip.cron
    
    • 1

    查看定时任务是否添加成功

    crontab -l
    
    • 1

    若有如下展示则证明添加成功
    在这里插入图片描述

    添加解压缩脚本
    创建解压缩执行脚本,传入解压缩脚本,脚本内容如下(文件夹目录自行补充。若有删除原先文件或指定目录请自行补充)

    unzip $(date +%Y%m%d_RegReport.zip)
    
    • 1
    #!/bin/bash这里是二次需求,要求文件夹下对应的文件解压至对应时间的文件夹下
    ls *.zip > ls.log
    for i in $(cat ls.log)
    do
    #echo $i  输出i变量,即文件夹下的子文件
    #echo ${i:0:8}  截取子文件前八位作为yyyymmdd日期
    #echo '../'${i:0:8}
    unzip -d  '../'${i:0:8} $i
    done
    
    rm -rf ls.log
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    验证方案
    查看压缩包是否被解压缩成功
    在这里插入图片描述

    查看定时任务执行日志
    通过root用户进行查询定时任务执行日志

    tail -300f  /var/log/cron
    
    • 1

    可通过执行记录判断脚本是否正常被调用
    在这里插入图片描述

    若有报错则提示在日志内部,请根据报错解决问题


    参考了许多博客才做出这么简单的东西,感谢曾经的前行者。

    LINUX定时任务实现方案

    Linux crontab 命令

    踏实一些,不要着急,你想要的,岁月都会给你!小吴加油

  • 相关阅读:
    阿里云yum源和tuna源
    Quartz手动修改数据库cron表达式(无须重启服务器即可更改定时时间)
    【LVS】nat模式+dr模式+防火墙标签解决轮询错误
    Qt安装教程
    93. 复原 IP 地址
    聚丙烯微孔膜的等离子体改性及DNA|有机自由基改性DNA-阳离子脂质复合体的应用
    CP Autosar中的PNC说明
    UE 交互草实现 不通过RT与距离场的方式
    简单几个配置 Go 实现敏感数据脱敏,可以自定义数据脱敏规则(附完整实现源码)
    Flutter入门-数据传递
  • 原文地址:https://blog.csdn.net/qq_40544575/article/details/133812990