Linux性能:日志清理

12/31/2023 Linux

目录


参考:


# Linux性能:日志清理


# 一、常用清空日志文件的方法

请注意,清空日志文件可能会导致丢失日志数据,因此在清空之前请确保已备份重要的日志信息。


# 1. 使用truncate命令

truncate命令可以将文件截断为指定大小或清空文件内容。示例:

# 清空名为logfile.log的日志文件
truncate -s 0 logfile.log
1
2

# 2. 使用cat命令重定向

cat命令可以将标准输入重定向到文件,使用空内容覆盖文件内容。示例:

# 清空名为logfile.log的日志文件
cat /dev/null > logfile.log
1
2

# 3. 使用echo命令重定向

echo命令可以将指定内容重定向到文件,使用空内容覆盖文件内容。示例:

# 清空名为logfile.log的日志文件
echo "" > logfile.log
1
2

# 4. 使用>/dev/null重定向

使用重定向符号 >将标准输出重定向到 /dev/null设备,达到清空日志文件的效果。示例:

# 清空名为logfile.log的日志文件
> logfile.log
1
2

# 5. 使用logrotate工具

logrotate是一个常用的日志管理工具,可以自动轮转、压缩和清理日志文件。

  • 编辑logrotate配置文件 /etc/logrotate.conf,添加相应的日志文件配置,并设置清理策略。
  • 运行logrotate命令,执行日志轮转和清理操作。
logrotate -f /etc/logrotate.conf
1

# 二、定时任务清理日志


# 1. 日志处理


# 1.1 查找文件

查找命令:find 对应目录 -mtime +天数 -name "文件名匹配逻辑"

# 查找/var/log/ 目录下所有1天前带"*.log"的文件
find /var/log/ -mtime +1 -name "*.log" 

#查找目录下大于50M的文件
find /var/log/  -size +50M
1
2
3
4
5

具体参数说明如下:

  • find:查找命令,用户查找指定条件的文件;
  • /var/log/ :想要进行清理的任意目录;
  • -mtime:标准语句写法;
  • +1:查找1天前的文件,这里用数字代表天数;
  • "*.log" :希望查找的数据类型,”*"表示查找所有文件。

# 1.2 查找并删除

删除文件命令:find【选项】 -exec rm -rf {} \;

#将/var/log/taos/ 目录下所有1天前带".*_00.log*"的文件删除
find /var/log/taos/ -mtime +1 -name "*_00.log*"  -exec rm -rf {} \;
1
2

具体参数说明如下:

  • find 【选项】:linux的查找命令
  • -exec:固定写法;
  • rm -rf:强制删除文件,包括目录;
  • {} :固定写法;

# 2. 计划任务


# 2.1 定时清理日志文件的常用方法

以下是在Linux系统上定时清理日志文件的一些方法:

  • 使用logrotate

logrotate是一款Linux系统中用于专门管理日志文件的工具,它支持各种日志文件的定期滚动、压缩和删除等操作。

logrotate的配置文件在/etc目录下,可以设置生效时间、日志保存数量、压缩、提醒等属性。

# 例如,执行以下命令可以每周清理/var/log目录下的所有日志文件:
0 0 * * 0 /usr/sbin/logrotate /etc/logrotate.conf
1
2
  • 使用Cron Job

Cron是一款在Linux系统中定时执行任务的工具,可以用来定时清理日志文件。可以使用Cron Job来清理Linux系统中的日志文件,比如将所有日志文件压缩归档,只保留30天以上的文件,然后将压缩的日志文件上传到远程机器备份。

# 例如,执行以下命令可以每月清理/var/log目录下的所有日志文件:
0 0 1 * * /usr/bin/find /var/log -name "*.log" -mtime +30 -exec tar -cvzf /tmp/mylog.tar.gz {} \; && scp /tmp/mylog.tar.gz user@example.com:/backup/
1
2
  • 使用系统自带工具

Linux系统还自带一些其他工具可以清理日志文件,例如,使用find命令和xargs命令。 find命令可以查找特定的文件,xargs命令可以对查找的文件进行操作。

# 例如,执行以下命令可以每天清理/var/log目录下7天前的所有日志文件:
0 0 * * * find /var/log -mtime +7 -name "*.log" -type f -print0 | xargs -0 rm -f
1
2

总之,定时清理日志文件是Linux系统管理的必要操作,它可以节省磁盘空间并提高系统的稳定性和性能。根据实际情况和需要,可以选择不同的工具和方法来实现这个目的。


# 2.2 使用Cron Job 的详细步骤

可以将命令写到一个可执行shell脚本文件中,再设置crontab调度执行,就可以让系统自动去清理相关文件。详细步骤如下:


# 2.2.1 创建shell脚本
# 新建可执行文件
touch /opt/damp/jar/bin/dellog_auto.sh
# 分配可运行权限
chmod u+x /opt/damp/jar/bin/dellog_auto.sh
1
2
3
4
# 编辑可执行文件
vim /opt/damp/jar/bin/dellog_auto.sh
1
2

编辑.sh文件如下:

#!/bin/sh
find /opt/damp/jar/logs/ -mtime +1 -name "*.log*"  -exec rm -rf {} \;
1
2

编辑完后, 按esc键输入:wq保存退出。


# 2.2.2 新增调度任务

crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

新增调度任务可用两种方法

(1) 在命令行输入: crontab -e, 然后添加相应的任务,wq存盘退出。

(2)直接编辑/etc/crontab 文件,即vim /etc/crontab,添加相应的任务。

#进入计划任务
crontab -e

#将.sh执行脚本加入到系统计划任务,到点自动执行
#输入示例:设置每天凌晨0点10分执行dellog_auto.sh文件进行数据清理任务了
10 0 * * * /opt/damp/jar/bin/dellog_auto.sh
1
2
3
4
5
6

编辑完后, 按esc键输入:wq保存退出。

#查看计划列表
crontab -l 
1
2

# 2.2.3 调度任务管理

设置周期性计划任务列表主要通过crontab命令进行,结合不同选项可以完成不同的计划管理操作:

  • -e:编辑计划任务列表
  • -u:指定所管理的计划任务属于哪个用户,默认是针对当前用户,一般只有root用户有权限使用此选项(用户编辑、删除其他用户的计划任务)
  • -l:列表显示计划任务
  • -r:删除计划任务列表

同时还可以和特殊字符一起使用:

  • 星号(*):代表所有可能的值,例如月份字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
  • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,3”,表示1和3
  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
  • 正斜线(/):可以用正斜线指定时间的间隔频率,同时正斜线可以和星号一起使用,例如/10,表示每十分钟执行一次。

cron文件语法


# 2.3 使用logrotate 的详细步骤

logrotate命令是Linux系统中一个用于管理日志文件的实用工具,它可以根据规则自动地旋转、清理和压缩日志文件,从而避免日志文件过多占用磁盘空间。

使用logrotate的步骤如下:

# 2.3.1 编辑配置文件

/etc/logrotate.d目录下创建一个新的文件,命名为需要清理的日志文件名。

例如,如果要清理nginx服务器的访问日志,可以创建一个文件/etc/logrotate.d/nginx,将下列配置内容复制至该文件中:

/var/log/nginx/access.log {    
	daily    
	rotate 7    
	compress    delaycompress    
	missingok    
	notifempty    
	create 0644 root root 
}
1
2
3
4
5
6
7
8

具体参数说明如下:

  • daily:表示每天执行一次清理操作,
  • rotate 7:表示保留7个备份文件,
  • compress:表示压缩备份文件,
  • missingok:表示如果日志文件不存在,则跳过不做处理,
  • notifempty:表示如果日志文件为空,则跳过不做处理,
  • create 0644 root root:表示创建新日志文件的权限和属主。
# 2.3.2 测试logrotate配置

使用以下命令可以测试logrotate配置是否正确:

logrotate -d /etc/logrotate.d/nginx
1

该命令会列出logrotate将要执行的操作,如果显示正确,则可以执行下一步。

# 2.3.3 添加日志清理任务

使用以下命令将任务添加到cron表中:

0 0 * * * /usr/sbin/logrotate /etc/logrotate.d/nginx >/dev/null 2>&1
1

该命令表示每天午夜12点执行一次logrotate命令,/dev/null是输出到空设备,2>&1是将错误信息输出到标准输出(即/dev/null)


# 2.4 使用systemd-tmpfiles 的详细步骤

使用systemd-tmpfiles也可以清理日志文件,它是systemd工具的一部分,可以用于管理临时文件和目录。

使用systemd-tmpfiles的步骤如下:

# 2.4.1 编辑配置文件

/etc/tmpfiles.d目录下创建一个新的文件,命名为需要清理的日志文件名。

例如,如果要清理/var/log/nginx/access.log文件,可以创建一个文件/etc/tmpfiles.d/nginx.conf,将下列配置内容复制至该文件中:

#Type Path Mode Age Argument 

r /var/log/nginx/access.log 0644 7d -
1
2
3

具体参数说明如下:

  • r:表示删除目标文件,
  • /var/log/nginx/access.log:是目标文件的路径,
  • 0644:是创建新日志文件的权限和属主,
  • 7d:表示删除7天以前的文件,
  • -:表示没有额外的参数。
# 2.4.2 添加日志清理任务

使用以下命令将任务添加到cron表中:

0 0 * * * /usr/bin/systemd-tmpfiles --clean >/dev/null 2>&1
1

该命令表示每天午夜12点执行一次systemd-tmpfiles命令,--clean选项用于清理临时文件和目录,/dev/null是输出到空设备,2>&1是将错误信息输出到标准输出(即/dev/null)。

上次更新时间: 9/25/2024, 1:19:15 AM