【Linux】使用 sh 脚本定期清除 N 天前的日志文件

357 阅读2分钟

本文主要记录,如何在LInux上编写sh脚本,并将它加入定时任务,达到一定周期内定时清理某些文件的功能。


1. 脚本编写

在程序运行过程中,通常会产生各种文件,如临时文件、日志文件等。如果不对这些文件进行管理,它们的数量会随着时间推移而逐步增加,从而对磁盘空间和系统性能造成压力。为此,我们提供了一个针对 CentOS 操作系统的脚本示例,用于在每天凌晨 0 点自动清理指定目录下 7 天内未被修改的无用文件。

#!/bin/bash

# Define directory path
LOG_DIR=/usr/local/tomcat/logs

# Calculate date 7 days ago in epoch time
SEVEN_DAYS_AGO=$(date +%s --date "7 days ago")

# Loop through log files in directory
for FILE in $LOG_DIR/*
do
  # Get last modification time of file in epoch time
  MODIFIED_TIME=$(stat -c %Y "$FILE")

  # Compare modified time with 7 days ago
  if [ $MODIFIED_TIME -lt $SEVEN_DAYS_AGO ]
  then
    # Delete file
    rm $FILE
  fi
done

解释:

命令/变量描述
#!/bin/bash表示该脚本需要使用 bash shell 解释器来执行。
LOG_DIR=/usr/local/tomcat/logs定义了要清理的日志文件目录。
SEVEN_DAYS_AGO=$(date +%s --date "7 days ago")计算了 7 天前的日期,并将其转换为 epoch 时间格式。
for FILE in $LOG_DIR*循环遍历 $LOG_DIR 目录下的所有文件。
MODIFIED_TIME=$(stat -c %Y $FILE)获取文件的最后修改时间并将其转换为 epoch 时间格式。
if [ $MODIFIED_TIME -lt $SEVEN_DAYS_AGO ]判断文件是否早于 7 天前被修改,如果是则执行下面的语句。
rm $FILE删除文件。

2. 在Linux系统上验证脚本

步骤操作例子
1将文件定义为.sh格式在终端中输入命令:mv filename /usr/local/sh/clear.sh,其中 filename 是你要转换的文件名。
2授权执行权限在终端中输入命令:chmod +x /usr/local/sh/clear.sh
3执行脚本在终端中进入脚本所在目录并输入命令:./clear.sh
4验证是否执行成功在终端中进入日志文件夹并检查是否已删除7天之前的文件。
5添加到定时任务在终端中输入命令:crontab -e,然后添加一行并保存:0 0 * * * /usr/local/sh/clear.sh