一、实现原理
利用shell脚本将当天的日志文件剪切到指定目录,然后nginx使用新的日志文件重新记录日志,定时任务利用linux自带的crontab定时器实现定时自动触发。
二、脚本开发
创建脚本文件如nginx_log_cut.sh,将下面的文件内容复制到文件中保存。
#!/bin/bash
# nginx的安装目录
NG_HOME=/usr/local/nginx
# nginx成功日志的文件名
ACCESS_NAME=access.log
# nginx失败日志的文件名
ERROR_NAME=error.log
# 保存历史日志的地方
LOGS_PATH=$NG_HOME/logs/loghistory
# 创建日志保存路径
mkdir -p $LOGS_PATH
# 获取当前时间戳
FILEDATE=$(date +%Y%m%d_%H%M%S)
# 切割日志
mv $NG_HOME/logs/$ACCESS_NAME $LOGS_PATH/nginx_${ACCESS_NAME}_${FILEDATE}.log
mv $NG_HOME/logs/$ERROR_NAME $LOGS_PATH/nginx_${ERROR_NAME}_${FILEDATE}.log
# nginx日志重开,若缺少该命令,则nginx新的日志不会在新文件中生成
$NG_HOME/sbin/nginx -s reopen
# 清理过期日志(修改时间为30天之前的,文件类型为log的)
find $LOGS_PATH -maxdepth 1 -type f -name '*.log' -mtime +30 | xargs rm -rf
echo 'the log process complete!'
如果需要对日志文件进行压缩,可自行添加文件压缩命令
三、创建定时任务
打开crontab定时器
crontab -e
在文件中添加定时任务配置,如
0 13 */1 * * /usr/local/nginx/logs/nginx_log_cut.sh
cron表达式可自行百度格式,0 13 */1 * * 表示每天13:00时执行该定时任务,执行nginx_log_cut.sh脚本
重启定时器
systemctl restart crond
如果需要设置crond为开机启动
chkconfig crond on