百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

用shell脚本定期清理系统日志

nanshan 2025-02-10 13:39 10 浏览 0 评论

前言

我们常常会在代码中添加打印日志,用于排查生成环境的问题。服务器日志文件一般是每天一个或多个文件,如果日志文件不清理,时间久了就会将磁盘空间占满,从而影响系统的正常运行。平时我们可以手动清理日志文件,但在节假日可能就不太方便了,那该怎么办呢?用shell脚本检查存储空间快满了来清理前几天的日志文件是一个比较好的解决方案。

分析磁盘空间占用情况

df 命令

df 命令以磁盘分区为单位查看文件系统中磁盘空间的使用情况。

语法:df [选项] [文件|目录]

选项:

-h 或 --human-readable :将信息以人类可读的形式打印。

-i 或 --inode :查看分区inode使用情况。

示例:

du命令

查看指定目录的磁盘空间使用情况。

du 命令会递归地计算指定目录下所有文件和子目录的磁盘使用量,并将结果显示出来。

语法:du [选项] [文件|目录]

选项:

-a或--all : 列出所有的文件和目录容量大小而不仅仅列出目录容量大小。

-s或--summarize : 仅显示总计,只列出最后加总的值。

-h或--human-readable : 以K,M,G为单位,提高信息的可读性。

-c或--total : 除了列出文件和目录的容量大小外,最后在列出总容量。

--max-depth=N : 递归显示(仅仅是显示)时的递归深度小于等于N。--max-depth=0相当于-s参数。

-d 数字 :递归深度设置,效果与--max-depth=N相同。

示例:

[root@VM-0-152-tencentos ~]# du -h --max-depth=1  /home/test/www/test-metrics-web/
5.4G    /home/test/www/test-metrics-web/logs
5.7G    /home/test/www/test-metrics-web/

shell脚本文件

编写清理日志文件的shell 脚本:clear_logs.sh

#!/bin/bash

# 设置日志文件所在目录
LOG_DIR="/home/test/www/test-metrics-web/logs"

# 设置保留日志的天数
DAYS_TO_KEEP=1

echo "delete file starting"

# 查找所有超过期限的日志文件列表,并保存到clear_log_file.txt
find "${LOG_DIR}" -name "*.log" -type f -mtime +"${DAYS_TO_KEEP}" > ${LOG_DIR}/clear_log_file.txt
# 遍历需要清除的日志文件列表
cat ${LOG_DIR}/clear_log_file.txt|while read fileName
do
        # 删除日志文件
        rm -f $fileName
        echo "Deleted file: ${fileName}"

done

脚本授权

chmod +x clear_logs.sh

crontab

crontab命令简介

在Linux系统中,crontab命令是一个用于执行定时任务的命令,crond(crontab)是系统默认自带的定时服务。我们可以通过编辑crontab文件来设置定时任务,使系统可以自动按照设定的时间和频率执行命令。crontab文件通常保存在/etc/crontab和/var/spool/cron目录下。


linux定时任务分类

Linux 系统下的任务调度分为两类:系统任务调度 和 用户任务调度。

系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。

/etc/crontab文件包括下面几行:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

用户任务调度:用户自定义的定期要执行的工作,用户可以使用 crontab 工具来定制自己的计划任务,所有用户自定义的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致,例如我用root用户设置了一个定时任务,那么其对应的crontab文件就是 /var/spool/cron/root。

crontab命令允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个crontab文件来保存调度信息。系统管理员可以通过cron.deny 和 cron.allow 这两个文件来禁止或允许。

/etc/cron.deny     该文件中所列用户不允许使用crontab命令
/etc/cron.allow    该文件中所列用户允许使用crontab命令
/var/spool/cron/   所有用户crontab文件存放的目录,以用户名命名

总结:系统级别的定时任务crontab文件是/etc/crontab,用户自定义的定时任务其crontab文件保存在 /var/spool/cron/ 目录下,名字和用户名一致。

定时任务设置

直接输入命令crontab -e 或者编辑文件/etc/crontab 就可以直接设置定时任务。

crontab -e //若命令是root用户执行,建议直接使用编辑/etc/crontab的方式

或者

vi /etc/crontab

crontab -e

*/1 * * * * /home/test/www/test-metrics-web/clear_logs.sh > /home/test/www/test-metrics-web/logs/logfile.log 2>&1

说明: crontab -e 会进入编辑模式,当输入的命令格式正确后会保存到/var/spool/cron目录下,以当前用户命名;

定时任务格式

我们看到/etc/crontab文件中有如下格式

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
分钟 小时 日期 月份 星期 (crontab表达式)
user-name 指的是执行这个定时任务的用户
command to be executed : 运行的命令

示例:每分钟以root用户执行/root/1.sh脚本
* * * * * root bash /root/1.sh

每个字段代表的含义如下:

minute: 表示分钟,可以是从0到59之间的任何整数。

hour:表示小时,可以是从0到23之间的任何整数。

day:表示日期,可以是从1到31之间的任何整数。

month:表示月份,可以是从1到12之间的任何整数。

week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。

command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

在以上各个字段中,还可以使用以下特殊字符:

星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。

逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”

中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”

正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

注意:在 crontab 命令中只有 “绝对路径”,不存在相对路径,故执行任何命令都需要写绝对路径

启动服务

cron是linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:

service crond start     //启动服务
service crond stop      //关闭服务
service crond restart   //重启服务
service crond reload    //重新载入配置
service crond status    //查看crontab服务状态

设置开机自动启动

# 查询开机自启动服务,enabled 是开机启动,disabled 是开机不启动.

systemctl list-unit-files | grep crond


# 设置开机自启动

systemctl enable crond


# 设置开机不启动

systemctl disable crond

[root@VM-0-152-tencentos test-metrics-web]# systemctl list-unit-files | grep crond
crond.service                                enabled         enabled

cron定时任务的执行日志

cron定时任务执行日志文件在: /var/log/cron

实例

案例1:要求每分钟执行一次 以root用户执行test.sh脚本

*/1 * * * * root /bin/bash /root/test.sh

案例2:要求每天的凌晨3点执行一次 执行 touch /tmp/testfile.txt命令

0 3 * * * /usr/bin/touch /tmp/testfile.txt

案例3:要求每天上午7,9,12点各执行一次

0 7,9,12 * * *  /app/Projects/bin/start.sh -config=/data/application.yml >> /data/info.log 2>&1

案例4:要求在每天上午的7点每隔2分钟执行一次(0分钟的时候执行)

*/2 7 * * *  echo "Have a good dream" >> /tmp/test.txt

相关推荐

三种自建KMS激活系统自动激活windows方法

第一种:在windows服务器上搭建主要针对vol版本(win7、win10、win20xx、win2012等等)平台:我自己搭建的windows虚拟机,windows2016的操作系统软件:...

重装系统被收98元?避开Windows付费陷阱的实用指南

重装系统被收98元?避开Windows付费陷阱的实用指南有网友反映,在重装Windows系统后,屏幕突然弹出“激活系统需支付98元服务费”的提示,疑惑自己是不是遭遇了付费陷阱。事实上,微软官方的Wi...

Windows Server2012远程桌面服务配置和授权激活

安装:注意:安装完毕之后需手动重启一下计算机配置终端服务管理工具---远程桌面服务---RD授权诊断程序,查看当前服务器有没有授权授权:运行—>gpedit.msc->计算机配置---管理...

新书速览|Windows Server 2022 系统与网站配置实战

讲述桌面体验、ServerCore/NanoServer,容器与云系统的配置1本书内容《WindowsServer2022系统与网站配置实战》秉持作者一贯理论兼具实践的写作风格,以新版的Wi...

Windows激活全攻略:KMS神钥与专业工具的完美结合!

对于许多Windows用户来说,系统的激活是一个必经的过程。虽然Windows操作系统在未经激活的状态下也可以使用一段时间,但长期来看,未激活的系统会限制某些功能并频繁提示用户激活。以下是两种流行的激...

微软Win9全新激活技术曝光(微软系统激活有什么用)

2014-07-0905:46:00作者:徐日俄罗斯Wzor日前披露了更多关于Windows9的最新消息,据悉,Windows9将会在今年秋季亮相,其宣传口号是“想要开始按钮和开始菜单?如你所...

快速激活Windows 10/11:CMD命令详细教程

#记录我的2024#激活Windows操作系统是确保系统功能和安全更新正常运行的重要步骤。本文将为您分享如何使用命令提示符(CMD)在Windows10和Windows11上进行激活的详细步骤。...

Wndows 2019 RDS应用发布部署(rds的安装和应用程序的发布)

安装前的准备1、需要提供服务器作为应用中心,应用中心的推荐配置如下表所示。规格建议1-10人11-20人21-50人51-100人100+人CPU4核8核16核内存8GB16GB32GB64GB系统盘...

解决 Windows 系统激活难题(如何解决windows激活问题)

今天,一位朋友给我说,他手头有三台电脑,均同时弹出系统未激活的提示。他对此毫无头绪,便急忙将电脑上出现的激活提示信息一股脑发给了我。我看到其中一台显示的是“Windows10企业版LTSC尚...

自建KMS激活服务器(自建kms激活服务器的风险)

自建KMS激活服务器Win10和office安装后,都需要激活才可以使用,一般可以输入购买的MAK激活码进行在线激活,也可以通过KMS激活,网上也有很多激活工具,但这些工具一般都含有病毒或木马程序,容...

30秒免费激活windows和office亲测有效!

“第三方工具有病毒?”“KMS服务器激活总失效?”今天给大家分享一个开源激活工具——MicrosoftActivationScripts(MAS),无需密钥、不装软件,30秒永久激活Window...

「操作系统」Windows 10 LTSC 2019 企业版C大集成更新版

Windows10LTSC企业版CHIANNET集成更新优化整合多镜像版,CHIANNET,是USBOS超级PE维护盘工具箱作者,长久以来一直默默的更新着,USBOSPE软件,电脑城装机及...

一文看懂Windows激活:自查方法+授权类型科普(Win7/Win10通用)

一、如何判断Windows是否永久激活?无论是Win7还是Win10,均可通过以下方法快速验证:命令提示符法(通用):按下Win+R,输入slmgr.vbs/xpr并按回车键运行即可查看是否...

部分Windows Server 2019/2022用户反馈无法运行微软Teams应用

IT之家7月2日消息,科技媒体borncity今天(7月2日)发布博文,报道称在多个WindowsServer版本上,MicrosoftTeams应用近期出现了运行故障。用...

这种Windows激活方式已有20年...(windows现在激活)

2006年微软正式发布WindowsVista,随之而来引入了一项新的激活机制「OEM激活」,这项机制在Vista和Win7上最为流行。其实WindowsServer自2008开始至2025版本一...

取消回复欢迎 发表评论: