本文主要记录,如何在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 |