nginx进行日志切割的shell脚本分享
发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,本篇内容主要讲解"nginx进行日志切割的shell脚本分享",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"nginx进行日志切割的shell脚本分享"吧!
千家信息网最后更新 2025年11月13日nginx进行日志切割的shell脚本分享
本篇内容主要讲解"nginx进行日志切割的shell脚本分享",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"nginx进行日志切割的shell脚本分享"吧!
一、脚本思路
第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志。在你未重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,linux是靠文件描述符而不是文件名定位文件。
第二步向nginx主进程发送USR1信号。
nginx主进程接到信号后会从配置文件中读取日志文件名称,重新打开日志文件(以配置文件中的日志名称命名),并以工作进程的用户作为日志文件的所有者。
重新打开日志文件后,nginx主进程会关闭重名的日志文件并通知工作进程使用新打开的日志文件。
工作进程立刻打开新的日志文件并关闭重名名的日志文件。
然后你就可以处理旧的日志文件了。
二、脚本实现
nginx日志按日期自动切割脚本如下:
#nginx日志切割脚本#!/bin/bash#设置日志文件存放目录logs_path="/usr/local/nginx/logs/"#设置pid文件pid_path="/usr/local/nginx/nginx.pid"#重命名日志文件mv ${logs_path}access.log ${logs_path}access_$(date -d "yesterday" +"%Y%m%d").log#向nginx主进程发信号重新打开日志kill -USR1 `cat ${pid_path}`试验环境:
# cat /etc/redhat-release Red Hat Enterprise Linux Server release 5.3 (Tikanga)# /opt/nginx/nginx -vnginx version: nginx/1.6.2
代码:
#!/bin/bash# ==============================================================================# chmod u+x /opt/nginx/cut_nginx_log.sh# crontab -e# 0 0 * * * /opt/nginx/cut_nginx_log.sh > /opt/nginx/logs/cut_nginx_log.log 2>&1# ==============================================================================LOGS_PATH="/opt/nginx/logs"ARCHIVE_YEAR=$(date -d "yesterday" "+%Y")ARCHIVE_MONTH=$(date -d "yesterday" "+%m")ARCHIVE_DATE=$(date -d "yesterday" "+%Y%m%d_%H%M%S")if [ -r /opt/nginx/nginx.pid ]; then mkdir -p "${LOGS_PATH}/${ARCHIVE_YEAR}/${ARCHIVE_MONTH}" mv "${LOGS_PATH}/access.log" "${LOGS_PATH}/${ARCHIVE_YEAR}/${ARCHIVE_MONTH}/access_${ARCHIVE_DATE}.log" kill -USR1 $(cat "/opt/nginx/nginx.pid") sleep 1 gzip "${LOGS_PATH}/${ARCHIVE_YEAR}/${ARCHIVE_MONTH}/access_${ARCHIVE_DATE}.log"else echo "Nginx might be down"fi# ==============================================================================# Clean up log files older than 100 days# ==============================================================================# Change HOUSEKEEPING=1 to enable clean upHOUSEKEEPING=0KEEP_DAYS=100if [ $HOUSEKEEPING == 1 ]; then if [ -d "${LOGS_PATH}" ]; then find "${LOGS_PATH}" -type f -name "access_*.log.gz" -mtime +${KEEP_DAYS} -exec rm -f {} \; fifi参考:
http://wiki.nginx.org/LogRotation
保存以上脚本nginx_log.sh,并设置定时切割任务
三、定时工作
在crontab中设置作业
代码如下:
0 0 * * * bash /usr/local/nginx/nginx_log.sh
这样就每天的0点0分把nginx日志重命名为日期格式,并重新生成今天的新日志文件。
到此,相信大家对"nginx进行日志切割的shell脚本分享"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
日志
文件
脚本
进程
工作
代码
信号
内容
文件名
日期
学习
配置
实用
更深
不用
任务
兴趣
名字
名称
实用性
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
一个计算机网络技术的题目
软件开发费用增加谈判
软件开发mac好用
保护个人网络安全学习
国家网络安全法全称及文件号
关系型数据库有哪些英文名称
推荐软件开发平台
宿迁市电信杯网络安全
天津软件开发学校
阿里云linux服务器价钱
知网数据库有学科差别么
影响网络安全的有哪些
单机软件开发毕业设计选题
物化视图远程数据库
服务器pci-e接口接什么
后端网络技术支撑服务人员学习
江苏大数据软件开发多少钱
广州互联网科技学校在哪
网络安全员是什么
上海浦东软件开发工程师
使用管理员权限启动服务器
新邵网络安全宣传活动
点数据库
自考本科软件开发考试填空题
从事软件开发工作的专业要求
湖北交友软件开发哪家实惠
数据库典型的非关系型数据库
对于网络安全的感受
梦幻西游散人最多的服务器
东莞软件开发有前途吗