定时清理Linux中log文件的正确姿势

虽说Linux几大发行版(Debian, Ubuntu, Redhat, Centos等)经过多年的发展,其自身在文件管理和系统优化等方面已经足够优秀,但是系统运行时间长了也会出现log日志文件占用空间过大的问题。一般地,Linux系统中log文件的目录位置在/Var/log文件夹中。对于硬盘容量较小的主机来说,如何正确清理该文件中的各个log文件就成了重要的问题。

判断log文件夹内容:

首先通过ssh连接Linux主机,进入/Var/log文件夹,查看占用空间交大的log文件有哪些,下面是我的树莓派对应文件夹里面的内容:

total 11200
-rw-r--r-- 1 root root        0 Feb 21 06:25 alternatives.log
drwxr-xr-x 2 root root     4096 Feb 20 11:13 apt
-rw-r----- 1 root adm    707071 Feb 21 13:49 auth.log
-rw-r--r-- 1 root root     3894 Feb 21 11:38 boot.log
-rw------- 1 root utmp  9697536 Feb 21 13:49 btmp
-rw-r----- 1 root adm    379003 Feb 21 13:50 daemon.log
-rw-r----- 1 root adm      7782 Feb 21 13:50 debug
-rw-r--r-- 1 root root    66534 Feb 20 11:29 dpkg.log
-rw-r----- 1 root adm    200784 Feb 21 12:40 kern.log
drwx--x--x 2 root root     4096 Feb 21 11:38 lightdm
-rw-r--r-- 1 root root        0 Feb 21 11:28 logfile
-rw-r----- 1 root adm     30822 Feb 21 12:40 messages
-rw------- 1 root root     1646 Feb 21 11:38 php7.0-fpm.log
drwxr-x--- 3 root adm      4096 Feb 21 06:25 samba
-rw-rw---- 1 root audio     150 Feb 21 11:38 shairport.err
-rw-rw---- 1 root audio      81 Feb 21 11:38 shairport.log
-rw-r----- 1 root adm    141823 Feb 21 13:50 syslog
-rw-r----- 1 root adm     63783 Feb 21 12:11 user.log
-rw-rw-r-- 1 root utmp    71808 Feb 21 13:44 wtmp
-rw-r--r-- 1 root root     8568 Feb 21 11:38 Xorg.0.log

编写清理shell脚本:

这里使用cat /dev/null命令清理各个log文件里面的内容,这里可以把/dev/null看作”黑洞”. 它等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到。新建命名为clean_log.sh的shell脚本,内容如下:

#!/bin/sh
cat /dev/null > /var/log/alternatives.log
cat /dev/null > /var/log/auth.log
cat /dev/null > /var/log/boot.log
cat /dev/null > /var/log/btmp
cat /dev/null > /var/log/daemon.log
cat /dev/null > /var/log/debug
cat /dev/null > /var/log/dpkg.log
cat /dev/null > /var/log/kern.log
cat /dev/null > /var/log/logfile
cat /dev/null > /var/log/amessages
cat /dev/null > /var/log/php7.0-fpm.log
cat /dev/null > /var/log/shairport.err
cat /dev/null > /var/log/shairport.log
cat /dev/null > /var/log/syslog
cat /dev/null > /var/log/user.log
cat /dev/null > /var/log/wtmp
cat /dev/null > /var/log/Xorg.0.log

然后通过使用chmod +x给脚本赋予执行权限,./clean_up.sh运行脚本,就实现了对各个log文本的内容清理。

使用crontab实现定时清理log:

为了实现每隔几天系统自动运行shell脚本清理log文件,这里使用crontab新建计划任务,以实现每隔五天对log文件的自动清理,sudo -s获取管理员权限后,命令行里面输入crontab -e编辑计划任务,最后一行添加:

0 0 */5 * * /home/pi/Desktop/shell/clean_log.sh

其中/home/pi/Desktop/shell是上面编辑的shell文件的绝对路径,这样就完成了对log文件自动清理的目标。^_O

发表评论

电子邮件地址不会被公开。