Linux性能:日志清理
目录
参考:
- 链接1:Linux清空日志的五种方法 (opens new window)
- 链接2:linux- 定时任务清理日志 (opens new window)
- 链接3:linux定时清理日志文件 (opens new window)
# Linux性能:日志清理
# 一、常用清空日志文件的方法
请注意,清空日志文件可能会导致丢失日志数据,因此在清空之前请确保已备份重要的日志信息。
# 1. 使用truncate
命令
truncate命令可以将文件截断为指定大小或清空文件内容。示例:
# 清空名为logfile.log的日志文件
truncate -s 0 logfile.log
2
# 2. 使用cat
命令重定向
cat命令可以将标准输入重定向到文件,使用空内容覆盖文件内容。示例:
# 清空名为logfile.log的日志文件
cat /dev/null > logfile.log
2
# 3. 使用echo
命令重定向
echo命令可以将指定内容重定向到文件,使用空内容覆盖文件内容。示例:
# 清空名为logfile.log的日志文件
echo "" > logfile.log
2
# 4. 使用>/dev/null
重定向
使用重定向符号 >
将标准输出重定向到 /dev/null
设备,达到清空日志文件的效果。示例:
# 清空名为logfile.log的日志文件
> logfile.log
2
# 5. 使用logrotate
工具
logrotate
是一个常用的日志管理工具,可以自动轮转、压缩和清理日志文件。
- 编辑
logrotate
配置文件/etc/logrotate.conf
,添加相应的日志文件配置,并设置清理策略。 - 运行
logrotate
命令,执行日志轮转和清理操作。
logrotate -f /etc/logrotate.conf
# 二、定时任务清理日志
# 1. 日志处理
# 1.1 查找文件
查找命令:find 对应目录 -mtime +天数 -name "文件名匹配逻辑"
# 查找/var/log/ 目录下所有1天前带"*.log"的文件
find /var/log/ -mtime +1 -name "*.log"
#查找目录下大于50M的文件
find /var/log/ -size +50M
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 {} \;
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
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/
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
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
2
3
4
# 编辑可执行文件
vim /opt/damp/jar/bin/dellog_auto.sh
2
编辑.sh文件如下:
#!/bin/sh
find /opt/damp/jar/logs/ -mtime +1 -name "*.log*" -exec rm -rf {} \;
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
2
3
4
5
6
编辑完后, 按esc键输入:wq
保存退出。
#查看计划列表
crontab -l
2
# 2.2.3 调度任务管理
设置周期性计划任务列表主要通过crontab
命令进行,结合不同选项可以完成不同的计划管理操作:
- -e:编辑计划任务列表
- -u:指定所管理的计划任务属于哪个用户,默认是针对当前用户,一般只有root用户有权限使用此选项(用户编辑、删除其他用户的计划任务)
- -l:列表显示计划任务
- -r:删除计划任务列表
同时还可以和特殊字符一起使用:
- 星号(*):代表所有可能的值,例如月份字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
- 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,3”,表示1和3
- 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
- 正斜线(/):可以用正斜线指定时间的间隔频率,同时正斜线可以和星号一起使用,例如/10,表示每十分钟执行一次。
# 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
}
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
该命令会列出logrotate
将要执行的操作,如果显示正确,则可以执行下一步。
# 2.3.3 添加日志清理任务
使用以下命令将任务添加到cron
表中:
0 0 * * * /usr/sbin/logrotate /etc/logrotate.d/nginx >/dev/null 2>&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 -
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
该命令表示每天午夜12点执行一次systemd-tmpfiles
命令,--clean
选项用于清理临时文件和目录,/dev/null
是输出到空设备,2>&1
是将错误信息输出到标准输出(即/dev/null
)。