Linux server automatically cuts and cleans logs linux system how to read linux linux tutorial

WBOY
Release: 2016-07-29 08:54:14
Original
1431 people have browsed it

Requirements

Since nginx logs will continue to grow, we need to cut the logs ourselves to facilitate management. We need to achieve the following results:

  1. Automatically cut logs by date, and the minimum unit is days.
  2. When the total amount of logs exceeds a certain amount, the logs will be automatically and directly cleared, and the total amount cannot exceed 1000MB.
  3. Write it into the crontab scheduled task.

Analysis

  1. nginx log directory contains access.log and error.log respectively. To automatically cut logs according to date, you need to save daily logs in the format of "yyyymmdd_access/error.log" and rename each log with mv. One day's worth of log files is enough.
  2. Cleaning logs is simple. You only need to determine the size of this folder, and then clean up the log files before a certain date.
  3. The crontab task is also relatively simple, details can be found here.
  4. The key to the problem is that after renaming yesterday’s log file with mv, nginx will still write logs to the renamed file (such as access_20160409.log). Our purpose is to make nginx regenerate a new one. Log file (access.log) and write.
  5. As we all know, everything under the Linux system is a file, so each process has its own file descriptor, and the nginx process writes its own file descriptor into nginx.pid. We need to tell nginx, Let it reopen a new log file (the configuration details of the log file can be seen here. Simply put, it is what the log records.) So we need this command:

    kill -USR1 `cat ${pid_path}`

    The meaning of this instruction is: first cat to the pid of nginx, which is an integer, and then send the signal USR1 to this process. After the nginx process receives this signal, it will reopen a new log file according to the configuration, and Log writing.

implementation

script cut_nginx_log.sh:

<code><span>#!/bin/bash</span>
log_path=/path/to/nginx/
pid_path=/path/to/nginx.pid

<span>#清理掉指定日期前的日志</span>
DAYS=<span>30</span><span>#生成昨天的日志文件</span>
mv <span>${log_path}</span>access.log <span>${log_path}</span>access_$(date <span>-d</span><span>"yesterday"</span> +<span>"%Y%m%d"</span>).log
mv <span>${log_path}</span>error.log <span>${log_path}</span>error_$(date <span>-d</span><span>"yesterday"</span> +<span>"%Y%m%d"</span>).log

kill -USR1 `cat <span>${pid_path}</span>`

<span>#文件夹大小</span>
size=du -m <span>-s</span><span>${log_path}</span><span>if</span> [size <span>-gt</span><span>1000</span>];<span>then</span>
    find <span>${logs_path}</span> -name <span>"access_*"</span> -type f -mtime +<span>$DAYS</span> -exec rm {} \;
    find <span>${logs_path}</span> -name <span>"error_*"</span> -type f -mtime +<span>$DAYS</span> -exec rm {} \;
<span>fi</span></code>
Copy after login

added to crontab:
(Automatically executed at midnight every day)

<code>crontab -e
<span>0</span><span>0</span> * * * /path/<span>to</span>/<span>script</span></code>
Copy after login

This has solved the problem of automatically cutting and cleaning logs. If you have any questions, please feel free to ask.

').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

The above introduces the automatic cutting and cleaning of logs on Linux servers, including Linux content. I hope it will be helpful to friends who are interested in PHP tutorials.

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template