首页 > 系统相关 >自动化运维-Linux通用性日志切割脚本

自动化运维-Linux通用性日志切割脚本

时间:2024-11-23 12:32:45浏览次数:7  
标签:bin 运维 echo file Linux 日志 backup dir

一、公司提供的参考脚本:

#!/bin/bash
# 定义需要清理的文件
log_file=(
    "/mpjava/ly.mp.dfpv.acc.biz/bin/nohup.out"
    "/mpjava/ly.mp.dfpv.acc.service/bin/nohup.out"
    # 添加更多微服务的日志目录路径
)
# 获取当天日期
date_now=$(date +%Y%m%d)

for file_dir in $log_file
do
   # 获取文件路径
   dir=$(dirname $file_dir)
   # 获取文件名
   file_name_new=$(basename $file_dir)
   # 创建备份目录
   mkdir -p ${dir}/backup
   # 备份日志
   cp ${file_dir} ${dir}/backup/${date_now}_${file_name_new}
   # 清空日志
   echo "" > ${file_dir}
   # 删除历史
   cd ${dir}/backup/ &&  find . -type f -mtime +6 -exec rm -f {} \;
done

验证结果:并未验证成功

二、自己改进后脚本:

#!/bin/bash

# 定义需要清理的文件
log_file=(
    "/mpjava/ly.mp.dfpv.acc.biz/bin/nohup.out"
    "/mpjava/ly.mp.dfpv.acc.service/bin/nohup.out"
    # 添加更多微服务或各服务组件的日志目录路径
)

# 获取当前日期和时间,用于备份文件名中包含时间戳
date_now=$(date +%Y%m%d_%H%M)

for file_dir in "${log_file[@]}"
do
    if [[ ! -f "$file_dir" ]]; then
        echo "Warning: File $file_dir does not exist, skipping."
        continue
    fi

    # 获取文件路径和文件名
    dir=$(dirname "$file_dir")
    file_name_new=$(basename "$file_dir")

    # 创建备份目录
    mkdir -p "${dir}/backup"

    # 备份日志,添加时间戳避免覆盖
    backup_file="${dir}/backup/${date_now}_${file_name_new}"
    cp "$file_dir" "$backup_file" && echo "Backup created: $backup_file" || echo "Error: Failed to backup $file_dir"

    # 清空日志
    > "$file_dir" && echo "Log cleared: $file_dir" || echo "Error: Failed to clear log $file_dir"

    # 删除超过7天的日志
    find "${dir}/backup" -type f -mtime +6 -exec rm -f {} \; &>/dev/null
    if [[ $? -eq 0 ]]; then
        echo "Old logs removed from ${dir}/backup"
    else
        echo "Error occurred while removing old logs from ${dir}/backup"
    fi
done

脚本执行过程:
执行脚本前:

执行脚本后:

结论:这个脚本是通用性脚本,nginx、各中间件、应用服务等日志清理都可以使用,只需要修改log_file变量为自己环境具体路径 和 日志文件即可

三、配置定时任务
1、打开当前用户的crontab文件:
crontab -e

2、添加定时任务(每天凌晨1点执行):
0 1 * * * /path/to/your/Log_cutting.sh
这里 /path/to/your/script.sh 应该替换为你的脚本实际所在的路径。

3、保存并关闭crontab文件:保存更改并退出编辑器。在 vi 或 vim 中,你可以按 ESC 然后输入 :wq 并按 Enter 保存并退出。在 nano 中,你可以按 Ctrl+X,然后按 Y 确认保存,最后按 Enter 退出。

4、确保脚本具有执行权限:
chmod +x /path/to/your/Log_cutting.sh

5、检查cron服务状态:
systemctl status cron
如果服务没有运行,你可以使用以下命令启动它:systemctl start cron

6、查看cron日志:
如果需要调试定时任务,你可以查看 /var/log/cron 日志文件来获取 cron 的日志信息。

7、注意环境问题:
cron 定时任务运行在非登录shell环境中,这意味着它可能没有访问某些环境变量。如果依赖于特定的环境变量,需要在脚本本身或在 crontab 文件中设置这些变量。

例如,如果需要知道 PATH 环境变量,可以在 crontab 文件中设置它,如下所示:

SHELL=/bin/bash
PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/local/bin
0 1 * * * /path/to/your/Log_cutting.sh

通过以上步骤,您可以设置一个定时任务来定期执行您的日志清理脚本。

标签:bin,运维,echo,file,Linux,日志,backup,dir
From: https://blog.csdn.net/weixin_66855479/article/details/143990411

相关文章

  • 蓝易云 - linux基本功系列之mv命令实战
    mv命令是Linux系统中的一个常用命令,用于移动文件或重命名文件。下面是对mv命令的一些实战用法:移动文件或目录:mv源路径目标路径​源路径:要移动的文件或目录的路径。目标路径:移动后的目标路径。例如,要将文件 file.txt移动到目录 /path/to/destination/中,可以执行以下命......
  • #渗透测试#SRC漏洞挖掘#网络运维# 黑客脚本编写06之if条件判断与for循环判断
    免责声明本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章阅读。                            ......
  • #渗透测试#SRC漏洞挖掘#网络运维# 黑客脚本编写07之for循环判断与while循环
    免责声明本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章阅读。                            ......
  • 理解UART 子系统:Linux Kernel 4.9.88 中的核心结构体与设计详解
    往期内容本专栏往期内容:Uart子系统UART串口硬件介绍深入理解TTY体系:设备节点与驱动程序框架详解Linux串口应用编程:从UART到GPS模块及字符设备驱动interrupt子系统专栏:专栏地址:interrupt子系统Linux链式与层级中断控制器讲解:原理与驱动开发–末片,有专栏内容观看顺序......
  • Docker 实践与应用举例:提升开发与运维效率的利器
    Docker是一个开源的容器化平台,用于自动化部署、扩展和管理应用程序。它通过将应用及其依赖打包成容器,能够使得开发、测试、部署和生产环境中的应用一致性得以保证。在本文中,我们将深入探讨Docker的基础知识、安装与配置,结合实际案例展示Docker在开发和运维中的强大应用。......
  • 【操作系统实验课】Linux操作基础
    1.打开UbuntuUbuntu-22.04虚拟机安装-CSDN博客打开虚拟机软件启动其中的Ubuntu22.04打开Ubuntu系统终端2.创建目录和文件创建test3目录:在终端中输入命令:mkdir/test3。此命令用于在根目录下创建test3目录。(注意在命令中,“mkdir”是创建目录的命令,“/test3”是要......
  • linux使用者须知!Ls命令输出的颜色究竟由什么含义?教你轻松区分~(带私活源码)
     在linux中我们经常会用到Ls命令,我们发现Ls的输出中有各种各样的颜色,今天和大家共同了解一下Ls背后的故事。简介Linux ls(英文全拼:listdirectorycontents)命令用于显示指定工作目录下之内容(列出目前工作目录所含的文件及子目录)。我们可以看到ls的输出中有着不同的颜色......
  • Linux基础命令:轻松掌握终端操作
    引言在现代IT行业中,Linux因其稳定性和灵活性广受欢迎。作为后端开发、系统管理和数据科学等领域的必备技能,熟练掌握Linux基本命令将使你在职场中更加游刃有余。无论你是刚接触Linux的新手,还是希望提升技能的开发者,了解Linux命令行的基本用法都是至关重要的。今天,我们将探讨一......
  • 黑客新手入门应该懂的Linux 细节知识
    Linux到底是什么?Linux是_*一个_*家族开源的类Unix操作系统基于Linux内核l.Linux是LinusTorvalds的创意。显然.他制作Linux是为了好玩,并于1991年9月17日发布了Linux的第一个版本。据传Linux的创造者打算将他的发明命名为Freax,但未经LinusTorvalds......
  • 【Linux学习】(6)编译器gcc/g++
    前言本节重点:掌握gcc/g++编译器的使用,并了解其过程,原理一、Linux编译器-gcc/g++使用1.gcc/g++的基本使用在前面我们学习了vim,知道如何在Linux中编写代码。但又是如何编译代码的?——在Linux中我们编译代码使用的是gcc/g++。gcc只能用来编译C语言,g++即可编译C也可编译......