最近两天突然感觉服务器容量快满了,果不其然。
其中有两台服务器、磁盘占用量比例很高。
下面分析大神的脚本。并运行起来,再也不用担心服务器的硬盘被日志占满了。
基本思路是,定时运行可以清除以前某个时间日志的脚本。
项目背景
需要掌握熟悉shell,crontab
日志目录:/www/logs/php
文件名词要求:前缀固定+日期(phplog-2020-10-27.log)
应用程序每天自动创建日志文件
脚本的第一步先得到要删除时间day1日期格式,然后再到日志目录删除日志文件。
# 获取时间
#date 显示当前日期 格式为 %Y-%m-%d
[root@zjt-baidu logrotate]# date +%Y-%m-%d
2020-10-28
#date -d -d、 --date=字符串显示由字符串描述的时间,而不是“now”
[root@zjt-baidu logrotate]# date -d "-1 day" +%Y-%m-%d
2020-10-27
[root@zjt-baidu logrotate]# day=`date -d "-1 day" +%Y-%m-%d`
[root@zjt-baidu logrotate]# echo $day
2020-10-27
#进入目录
# cd /www/log/php
# 删除文件
rm /www/log/php/phplog-2020-10-26.log
#添加 -f 选项 强制删除,不进行交互
rm /www/log/php/phplog-2020-10-26.log
得到下面的clearLog.sh文件的内容
第3行和第4行 调试用,为了保证不误操作,一定先打印出文件名,确认无误后再打开注释,
然后执行。不然删除错误就完蛋了。
#/bin/bash
LOGDIR='/www/logs/php'
DAY=`date -d "-1 day" +%Y-%m-%d`
echo $DAY
cd $LOGDIR
echo $LOGDIR/phplog-${DAY}.log
#rm -f $LOGDIR/phplog-${DAY}.log
但上面的shell要求满足应用程序每天可以自动创建新文件。
兼容不能创建新文件的需求
DATE=`date -d '1 days ago' "+%Y-%m-%d"`
#不带日期的日志文件 拷贝 为带日期的日志文件
cp /www/logs/phplog.log /www/logs/phplog-$DATE.log
>/www/logs/phplog.log
chown -r www:www /www/logs/phplog.log
最终的清理日志文件,保留15天
#/bin/bash
LOGDIR='/www/logs/php'
DAY=`date -d "-15 day" +%Y-%m-%d`
echo $DAY
cd $LOGDIR
echo $LOGDIR/phplog-${DAY}.log
DATE=`date -d '1 days ago' "+%Y-%m-%d"`
#不带日期的日志文件 拷贝 为带日期的日志文件
cp /www/logs/phplog.log /www/logs/phplog-$DATE.log
>/www/logs/phplog.log
#修改权限
chown -R www:www /www/logs/phplog.log
rm -f $LOGDIR/phplog-${DAY}.log
如果本文对你有帮助,请转发,说不定你的朋友也需要它。