linux服务器自动切割日志
需求
由于nginx的日志会不停地增大,所以需要我们自己去切割日志,方便管理,需要达到以下的效果:
- 按日期自动切割日志,最小单位是天。
- 当日志总量超过一定量时,自动直接清理日志,限定总量不能超过1000MB。
- 写入crontab定时任务里。
分析
- nginx日志目录下分别有access.log和error.log,按照日期自动切割日志则需要将每天的日志以”yyyymmdd_access/error.log”的格式保存下来,用mv重命名每一天的日志文件即可。
- 清理日志就简单了,只需要判断这个文件夹下的大小,然后将一定日期之前的日志文件清理掉就ok了。
- crontab任务也比较简单,详情可以看这里。
- 问题的关键在于,用mv重命名完昨天的日志文件后,nginx还是会向这个重命名后的文件(如access_20160409.log)写入日志,我们的目的是需要使nginx重新生成一个新的日志文件(access.log)并写入。
As we all know,linux系统下一切都是文件,所以每一个进程都有其文件描述符,而nginx进程将其自己的文件描述符写入了nginx.pid中,我们需要告诉nginx,让其重新打开一个新的日志文件(日志文件的配置详情可看这里,简单说就是让日志记录什么内容。)于是我们需要这条指令:
kill -USR1 `cat ${pid_path}`
这条指令的意思是:首先cat到nginx的pid,是一个整数,然后将信号USR1发送给这个进程,nginx进程收到这个信号后,会根据配置重新打开一个新的日志文件,并将日志写入。
实现
脚本cut_nginx_log.sh:
#!/bin/bash
log_path=/path/to/nginx/
pid_path=/path/to/nginx.pid #清理掉指定日期前的日志
DAYS= #生成昨天的日志文件
mv ${log_path}access.log ${log_path}access_$(date -d "yesterday" +"%Y%m%d").log
mv ${log_path}error.log ${log_path}error_$(date -d "yesterday" +"%Y%m%d").log kill -USR1 `cat ${pid_path}` #文件夹大小
size=`du -b /path/to/nginx/ | awk '{print int($1/1024/1024)}'` if [size -gt ];then
find ${logs_path} -name "access_*" -type f -mtime +$DAYS -exec rm {} \;
find ${logs_path} -name "error_*" -type f -mtime +$DAYS -exec rm {} \;
fi
添加至crontab:
(每天零点自动执行)
crontab -e
0 0 * * * /path/to/script
至此就解决了自动切割并清理日志的功能。
linux服务器自动切割日志的更多相关文章
- linux系统日志自动切割工具----logrotate
参考资料 :https://www.cnblogs.com/kevingrace/p/6307298.html 对于Linux系统安全来说,日志文件是极其重要的工具.不知为何,我发现很多运维同学的服务 ...
- linux服务器上nginx日志访问量统计命令
linux服务器上nginx日志访问量统计命令 日志文件所在地方:/var/log/nginx/access_iqueendress.com.log/var/log/nginx/access_m.iq ...
- 【shell脚本】nginx每天自动切割日志脚本
nginx每天日志量比较大的时候,最好每天自动切割,存储,这样可以方面以后的查询和分析 #!/bin/sh ################### #filename: nginx_log_rotat ...
- Linux服务器上创建日志服务器和FTP服务器
参考地址: http://www.111cn.net/sys/CentOS/81133.htm https://www.cnblogs.com/laoxiajiadeyun/p/9943742.htm ...
- linux服务器上tomcat日志中的中文乱码
转: 修改tomcat应用日志默认编码格式 前言 今天开发跟我说tomcat日志中的中文不能正常显示,根据以往的经验,我觉得可能跟服务器的编码有关,于是尝试各种方法,但还是没能解决问题. 后来我突然想 ...
- MobaXterm实时查看Linux服务器上的日志
一.工具 MobaXterm介绍 https://blog.csdn.net/juyin2015/article/details/79056687/ 1.,点击Session 输入服务器IP.用户名 ...
- linux服务器自动备份与删除postgres数据库数据
1.先创一个back.sh 文件,授权,然后在下面这个文件添加脚本 export PGPASSWORD='123456' #这是登录服务器密码cur_time=`date +%Y%m%d ...
- Linux服务器自动备份压缩MySQL数据库的实用方法
<?php$server = 'localhost'; $link = mysql_connect($server, 'root', 'haven'); $result = mysql_quer ...
- linux服务器查看项目日志命令
1.tailf mywork.log | grep --line-buffered findUserList 实时跟踪日志,这里是只要findUserList 这个方法被运行,就会将它的日志 ...
随机推荐
- node js 调试出现同一个端口启动多次报错处理方案 Error: listen EADDRINUSE
windows 下 1.查询端口占用的进程ID: netstat -aon | findstr "80" 80为端口号, 输出为: TCP 0.0.0.0:3000 ...
- Android WebView的注意事项
1.修改权限,添加<uses-permission android:name="android.permission.INTERNET"/> 2.loadUrl方法要写 ...
- C语言 · 逆序排列
算法提高 逆序排列 时间限制:1.0s 内存限制:512.0MB 问题描述 编写一个程序,读入一组整数(不超过20个),并把它们保存在一个整型数组中.当用户输入0时,表示输入结束.然 ...
- AM335x 添加 HUAWEI MU609 Mini PCIe Module,并用pppd 启动相关设备
kernel 的配置 kernel 3.2.0 make menuconfig Device Drivers ---> [*] USB support ---> <*> USB ...
- 关于Linux网卡调优之:RPS (Receive Packet Steering)
昨天在查LVS调度均衡性问题时,最终确定是 persistence_timeout 参数会使用IP哈希.目的是为了保证长连接,即一定时间内访问到的是同一台机器.而我们内部系统,由于出口IP相对单一,所 ...
- 原生js怎么删除一个 div
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- MyBatis是支持普通 SQL查询
MyBatis是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis 使用简单的 XML或注解用于配置 ...
- Py3+PyQt5+Eric6:学习记录之第一天:点击按钮获取文本框的值并输出。
一.使用qt designer拖拽界面. 使用qtdesigner拖拽界面:
- hdu 1058:Humble Numbers(动态规划 DP)
Humble Numbers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- 利用WM_COPYDATA消息实现进程间通信
进程间通信最简单的方式就是发送WM_COPYDATA消息,下面通过例子来实现. 发送WM_COPYDATA消息: SendMessage(hRecvWnd, WM_COPYDATA, (WPARAM) ...