Shell脚本获取指定目录文件大小,进行切分
在测试中,我们会保证log文件大小,所以写了一个小脚本不断获取log大小。如下:
#!/bin/bash
echo "file size demo!"
mLogFilePath="/home/demo.log"
mFileMaxSize=$((1024*1))
echo "mLogFilePath: " ${mLogFilePath} "mFileMaxSize: "${mFileMaxSize}
while true
do
if [ -e "$mLogFilePath" ];then
echo "file exist!"
mLogFileSize=`ls -l $mLogFilePath | awk '{ print $5 }'`
echo "log file size:" ${mLogFileSize} " mFileMaxSize:" ${mFileMaxSize}
if [ $[mLogFileSize] -ge $[mFileMaxSize] ] ;then
echo "$mLogFileSize > $mFileMaxSize"
mv $mLogFilePath "${mLogFilePath}_`date +%Y-%m-%d_%H:%M:%S`".log
else
echo "$mLogFileSize < $mFileMaxSize"
fi
else
echo "file not exist!"
fi
sleep 1
done
执行结果:
//测试文件内容:
asfbsdkjbfaksdbfakbdskbfabsdbfabdsf
asfbsdkjbfaksdbfakbdskbfabsdbfabdsf
asfbsdkjbfaksdbfakbdskbfabsdbfabdsf
asfbsdkjbfaksdbfakbdskbfabsdbfabdsf
asfbsdkjbfaksdbfakbdskbfabsdbfabdsf
//结果:
log file size: 180 mFileMaxSize: 1024
180 < 1024
file exist!
log file size: 180 mFileMaxSize: 1024
180 < 1024
file exist!
log file size: 180 mFileMaxSize: 1024
180 < 1024
file exist!
log file size: 180 mFileMaxSize: 1024
180 < 1024
file exist!
log file size: 180 mFileMaxSize: 1024
180 < 1024
file exist!
log file size: 180 mFileMaxSize: 1024
180 < 1024
file exist!
log file size: 180 mFileMaxSize: 1024
180 < 1024
按日期切分日志
例:ngnix
现有的日志都存在了/var/log/nginx/ 目录下,这在我们安装的时候已经指定了相应的位置,包括两个日志 /var/log/nginx/error.log及 /var/log/nginx/access.log ,但是随着时间的推移,日志文件会越来越多,体积会越来越大,不便于运维人员查看,所以我们可以通过把这个大的日志切割成多个不同的小文件作为日志,切割规则可以以天为单位,如果每天有几百个G或者几T的文件的话,则可以按半天或小时进行切割。
具体步骤如下:
1、创建一个shell可执行文件:cut_my_log.sh,内容如下: 注意以下脚本是按照分钟进行切割的,在工作中可以按照实际场景进行修改, 按天切割:RECORD_TIME=$(date -d "yesterday" +%Y-%m-%d) 。
#!/bin/bash
LOG_PATH="/var/log/nginx"
RECORD_TIME=$(date -d "yesterday" +%Y-%m-%d+%H:%M)
PID=/var/run/nginx/nginx.pid
mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${RECORD_TIME}.log
mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${RECORD_TIME}.log
# 向nginx主进程发送信号,用于重新打开日志
kill -USR1 `cat $PID`