30

在Linux中使用Bash脚本删除早于 “X” 天的文件/文件夹

 4 years ago
source link: https://www.tuicool.com/articles/7zeaqu2
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

aM77FbA.jpg!web

磁盘使用率 监控工具能够在达到给定阈值时提醒我们。但它们无法自行解决 磁盘使用率 问题。需要手动干预才能解决该问题。

如果你想完全自动化此类操作,你会做什么。是的,可以使用 bash 脚本来完成。

该脚本可防止来自 监控工具 的警报,因为我们会在填满磁盘空间之前删除旧的日志文件。

我们过去做了很多 shell 脚本。如果要查看,请进入下面的链接。

我在本文中添加了两个 bash 脚本,它们有助于清除旧日志。

1)在 Linux 中删除早于 “X” 天的文件夹的 Bash 脚本

我们有一个名为 /var/log/app/ 的文件夹,其中包含 15 天的日志,我们将删除早于 10 天的文件夹。

$ls -lh/var/log/app/
 
drwxrw-rw- 3root root24K Oct 1 23:52app_log.01
drwxrw-rw- 3root root24K Oct 2 23:52app_log.02
drwxrw-rw- 3root root24K Oct 3 23:52app_log.03
drwxrw-rw- 3root root24K Oct 4 23:52app_log.04
drwxrw-rw- 3root root24K Oct 5 23:52app_log.05
drwxrw-rw- 3root root24K Oct 6 23:54app_log.06
drwxrw-rw- 3root root24K Oct 7 23:53app_log.07
drwxrw-rw- 3root root24K Oct 8 23:51app_log.08
drwxrw-rw- 3root root24K Oct 9 23:52app_log.09
drwxrw-rw- 3root root24K Oct 10 23:52app_log.10
drwxrw-rw- 3root root24K Oct 11 23:52app_log.11
drwxrw-rw- 3root root24K Oct 12 23:52app_log.12
drwxrw-rw- 3root root24K Oct 13 23:52app_log.13
drwxrw-rw- 3root root24K Oct 14 23:52app_log.14
drwxrw-rw- 3root root24K Oct 15 23:52app_log.15

该脚本将删除早于 10 天的文件夹,并通过邮件发送文件夹列表。

你可以根据需要修改 -mtime X 的值。另外,请替换你的电子邮箱,而不是用我们的。

# /opt/script/delete-old-folders.sh
 
#!/bin/bash
prev_count=0
fpath=/var/log/app/app_log.*
find$fpath-type d-mtime+10 -exec ls -ltrh{}\;> /tmp/folder.out
find$fpath-type d-mtime+10 -exec rm -rf{}\;
count=$(cat /tmp/folder.out| wc -l)
if [ "$prev_count" -lt"$count" ] ; then
MESSAGE="/tmp/file1.out"
TO="[email protected]"
echo "Application log folders are deleted older than 15 days" >>$MESSAGE
echo "+----------------------------------------------------+" >>$MESSAGE
echo "" >>$MESSAGE
cat /tmp/folder.out|awk'{print $6,$7,$9}' >>$MESSAGE
echo "" >>$MESSAGE
SUBJECT="WARNING: Apache log files are deleted older than 15 days $(date)"
mail-s"$SUBJECT" "$TO" <$MESSAGE
rm$MESSAGE/tmp/folder.out
fi

delete-old-folders.sh 设置可执行权限。

# chmod +x/opt/script/delete-old-folders.sh

最后添加一个 cronjob 自动化此任务。它于每天早上 7 点运行。

#crontab-e
 
0 7 * * * /bin/bash /opt/script/delete-old-folders.sh

你将看到类似下面的输出。

Application log folders are deleted  older than 20 days
+--------------------------------------------------------+
Oct 11 /var/log/app/app_log.11
Oct 12 /var/log/app/app_log.12
Oct 13 /var/log/app/app_log.13
Oct 14 /var/log/app/app_log.14
Oct 15 /var/log/app/app_log.15

2)在 Linux 中删除早于 “X” 天的文件的 Bash 脚本

我们有一个名为 /var/log/apache/ 的文件夹,其中包含15天的日志,我们将删除 10 天前的文件。

以下文章与该主题相关,因此你可能有兴趣阅读。

# ls -lh/var/log/apache/
 
-rw-rw-rw- 3root root24K Oct 1 23:52 2daygeek_access.01
-rw-rw-rw- 3root root24K Oct 2 23:52 2daygeek_access.02
-rw-rw-rw- 3root root24K Oct 3 23:52 2daygeek_access.03
-rw-rw-rw- 3root root24K Oct 4 23:52 2daygeek_access.04
-rw-rw-rw- 3root root24K Oct 5 23:52 2daygeek_access.05
-rw-rw-rw- 3root root24K Oct 6 23:54 2daygeek_access.06
-rw-rw-rw- 3root root24K Oct 7 23:53 2daygeek_access.07
-rw-rw-rw- 3root root24K Oct 8 23:51 2daygeek_access.08
-rw-rw-rw- 3root root24K Oct 9 23:52 2daygeek_access.09
-rw-rw-rw- 3root root24K Oct 10 23:52 2daygeek_access.10
-rw-rw-rw- 3root root24K Oct 11 23:52 2daygeek_access.11
-rw-rw-rw- 3root root24K Oct 12 23:52 2daygeek_access.12
-rw-rw-rw- 3root root24K Oct 13 23:52 2daygeek_access.13
-rw-rw-rw- 3root root24K Oct 14 23:52 2daygeek_access.14
-rw-rw-rw- 3root root24K Oct 15 23:52 2daygeek_access.15

该脚本将删除 10 天前的文件并通过邮件发送文件夹列表。

你可以根据需要修改 -mtime X 的值。另外,请替换你的电子邮箱,而不是用我们的。

# /opt/script/delete-old-files.sh
 
#!/bin/bash
prev_count=0
fpath=/var/log/apache/2daygeek_access.*
find$fpath-type f-mtime+15 -exec ls -ltrd{}\;> /tmp/file.out
find$fpath-type f-mtime+15 -exec rm -rf{}\;
count=$(cat /tmp/file.out| wc -l)
if [ "$prev_count" -lt"$count" ] ; then
MESSAGE="/tmp/file1.out"
TO="[email protected]"
echo "Apache Access log files are deleted older than 20 days" >>$MESSAGE
echo "+--------------------------------------------- +" >>$MESSAGE
echo "" >>$MESSAGE
cat /tmp/file.out|awk'{print $6,$7,$9}' >>$MESSAGE
echo "" >>$MESSAGE
SUBJECT="WARNING: Apache log folders are deleted older than 15 days $(date)"
mail-s"$SUBJECT" "$TO" <$MESSAGE
rm$MESSAGE/tmp/file.out
fi

delete-old-files.sh 设置可执行权限。

# chmod +x/opt/script/delete-old-files.sh

最后添加一个 cronjob 自动化此任务。它于每天早上 7 点运行。

#crontab-e
 
0 7 * * * /bin/bash /opt/script/delete-old-folders.sh

你将看到类似下面的输出。

Apache Access log files are deleted older than 20 days
+--------------------------------------------------------+
Oct 11 /var/log/apache/2daygeek_access.11
Oct 12 /var/log/apache/2daygeek_access.12
Oct 13 /var/log/apache/2daygeek_access.13
Oct 14 /var/log/apache/2daygeek_access.14
Oct 15 /var/log/apache/2daygeek_access.15

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK