linux服务器自动切割日志

需求

由于nginx的日志会不停地增大,所以需要我们自己去切割日志,方便管理,需要达到以下的效果:

  1. 按日期自动切割日志,最小单位是天。
  2. 当日志总量超过一定量时,自动直接清理日志,限定总量不能超过1000MB。
  3. 写入crontab定时任务里。

分析

  1. nginx日志目录下分别有access.log和error.log,按照日期自动切割日志则需要将每天的日志以”yyyymmdd_access/error.log”的格式保存下来,用mv重命名每一天的日志文件即可。
  2. 清理日志就简单了,只需要判断这个文件夹下的大小,然后将一定日期之前的日志文件清理掉就ok了。
  3. crontab任务也比较简单,详情可以看这里
  4. 问题的关键在于,用mv重命名完昨天的日志文件后,nginx还是会向这个重命名后的文件(如access_20160409.log)写入日志,我们的目的是需要使nginx重新生成一个新的日志文件(access.log)并写入。
  5. 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=30

#生成昨天的日志文件
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 1000];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

至此就解决了自动切割并清理日志的功能。

原文地址:https://www.cnblogs.com/areyouready/p/9334872.html

时间: 2024-10-06 17:10:15

linux服务器自动切割日志的相关文章

linux系统日志自动切割工具----logrotate

参考资料 :https://www.cnblogs.com/kevingrace/p/6307298.html 对于Linux系统安全来说,日志文件是极其重要的工具.不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己的轮子,这真是让人沮丧啊!就好比明明身边躺着现成的性感美女,大家却忙着自娱自乐,罪过!logrotate程序是一个日志文件管理工具.用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到

Linux服务器上创建日志服务器和FTP服务器

参考地址: http://www.111cn.net/sys/CentOS/81133.htm https://www.cnblogs.com/laoxiajiadeyun/p/9943742.html https://blog.51cto.com/liqingbiao/2119953 https://www.cnblogs.com/hasayaki/archive/2013/01/24/2874889.html 在 Linux 上配置一个 syslog 服务器 syslog服务器可以用作一个网

centOS6.5 修改catalina.sh使用crontab自动切割日志tomcat8

1.添加LD_LIBRARY_PATH #!/bin/shLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/libexport LD_LIBRARY_PATH 2.修改jvm参数 # OS specific support. $var _must_ be set to either true or false.#export JAVA_OPTS="-server -Dfile.encoding=UTF-8 -Duser.language=zh_CN

利用Putty从linux服务器上拷贝日志log文件到本地

打开Putty,输入欲访问的主机名或IP    例如:qtstgfs2job01.appnet.atpco.org  2.登陆 ,默认SSH  端口22 3.输入用户名,密码 4.转到log文件夹(命令:cd /log ) 5.查看所有日志文件 (命令:ls -a) 6.进入命令行,进入到Putty安装目录cd C:\Program Files (x86)\PuTTY 7.拷贝文件 命令: pscp [email protected]:/log/qtstgfs2job01_GfsLoad.log

tomcat自动切割日志(Windows)

第一步:获取cronolog 下载cronolog-win32 第二步:解压后把cronolog.exe放在tomcat的bin目录下 第三步:修改tomcat的startup.bat文件 call "%EXECUTABLE%"start %CMD_LINE_ARGS% 替换为 call "%EXECUTABLE%" run %CMD_LINE_ARGS% 第四步:修改tomcat的catalina.bat文件 在最后几行加上,下图红色箭头标示的每行末尾 加上 红色

linux服务器查看项目日志命令

1.tailf mywork.log | grep --line-buffered findUserList      实时跟踪日志,这里是只要findUserList 这个方法被运行,就会将它的日志打印出来,用于跟踪特定的日志运行. --line-buffered 是一行的缓冲区,只要这一行的缓冲区满了就会打印出来,所以可以用于实时监控日志. 2. tailf -n 500 mywork.log   打印最后500行日志,并且持续跟踪日志. 3. grep '调用远程服务运行结果是' mywo

linux服务器自动备份mysql数据库

1.创建备份文件夹 mkdir /var/lib/mysqlbackup 2.编写备份脚本代码 vi dbbackup.sh 3.脚本内容 #!/bin/sh mysqldump -uuser -ppassword dbname | gzip > /var/lib/mysqlbackup/dbname`date +%Y-%m-%d_%H%M%S`.sql.gz cd /var/lib/mysqlbackup rm -rf `find . -name '*.sql.gz' -mtime 10` #

在linux服务器下日志提取的python脚本(实现输入开始时间和结束时间打包该时间段内的文件)

1.需求:近期在提取linux服务器下的日志文件时总是需要人工去找某个时间段内的日志文件,很是枯燥乏味,于是乎,我就想着用python结合linux指令来写一个日志提取的脚本,于是就有了以下脚本文件: 2.代码:getlogzip.py 1 import time,sys,os 2 3 filename1 = time.strftime('%m%d',time.localtime(time.time())) 4 filename2 = "log" 5 servername = inpu

Linux系统存储交换机日志

志记录是为系统设备在运行过程中报告其运行情况而设的, 为了保证系统正常运行, 解决每一天可能遇到的各种各样的问题, 网络管理员必须认真地读取日志记录.目前公司系统路由器共有50 台左右, 均为Cisco 路由器, 使用show log 命令来查看日志, 但将所有的路由器逐个查看是非常费时费力的.由于Cisco 路由器存储日志记录的缓存很小(默认是4 KB) , 一条记录的保存时间一般只有几分钟, 缓存器以先进先出的队列模式处理日志记录, 最早的记录将被刷新, 一些重要的日志记录有可能被覆盖.因此