# Nginx 日志切割

现有的日志都会存在 access.logerror.log 文件中,但是随着时间的推移,这个文件的内容会越来越多,体积会越来越大,不便于查看。

所以我们可以通过把文件切割为多份不同的小文件作为日志,切割规则可以以 天 为单位,如果每天有几百G或者几个T的日志的话,则可以按需以 每半天 或者 每小时 对日志切割。

# 查看日志保存目录

root@nginx01 nginx]# whereis nginx
nginx: /usr/local/nginx
[root@nginx01 nginx]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.16.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
configure arguments: --prefix=/usr/local/nginx --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_gzip_static_module --http-client-body-temp-path=/var/temp/nginx/client --http-proxy-temp-path=/var/temp/nginx/proxy --http-fastcgi-temp-path=/var/temp/nginx/fastcgi --http-uwsgi-temp-path=/var/temp/nginx/uwsgi --http-scgi-temp-path=/var/temp/nginx/scgi

# Nginx 日志切割-手动

  1. 创建一个shell可执行文件: cut_log.sh ,内容为:
#!/bin/bash
LOG_PATH="/var/log/nginx/" # 日志文件保存目录
RECORD_TIME=$(date -d "yesterday" +%Y-%m-%d) # 以天为单位切割日志
PID=/var/run/nginx/nginx.pid
mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${RECORD_TIME}.log # 使用 mv 备份,切割日志
mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${RECORD_TIME}.log
#向Nginx主进程发送信号,USR1 信号用于重新打开日志文件
kill -USR1 `cat $PID` # 等价于 `nginx -s reopen`

在生产环境中,不能使用 cp 切割日志,否则会导致日志丢死。必须使用 mv 命令进行日志切割,因为linux文件系统中,改名并不会影响已经打开文件的写入操作,内核inode不变,这样就不会出现丢日志了。

  1. 为 cut_log.sh 添加可执行的权限:
chmod +x cut_log.sh
  1. 执行日志切割脚本:
./cut_log.sh

# Nginx 日志切割-定时

# 使用定时任务

  1. 安装定时任务:
yum install crontabs
  1. 执行 crontab -e 编辑并且添加一行新的任务:
* */1 * * * /usr/local/nginx/sbin/cut_log.sh
  1. 重启定时任务:
service crond restart

# 常用定时任务命令

service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
crontab -e // 编辑任务
crontab -l // 查看任务列表

# 定时任务表达式

# 实例1:每1分钟执行一次脚本

* * * * * /usr/local/nginx/sbin/cut_log.sh

# 实例2:每小时的第3和第15分钟执行

3,15 * * * * /usr/local/nginx/sbin/cut_log.sh

# 实例3:在上午8点到11点的第3和第15分钟执行

3,15 8-11 * * * /usr/local/nginx/sbin/cut_log.sh

# 实例4:每隔两天的上午8点到11点的第3和第15分钟执行

3,15 8-11 */2  *  * /usr/local/nginx/sbin/cut_log.sh

# 实例5:每周一上午8点到11点的第3和第15分钟执行

3,15 8-11 * * 1 /usr/local/nginx/sbin/cut_log.sh

# 实例6:每晚的21:30重启smb

30 21 * * * /etc/init.d/smb restart

# 实例7:每月1、10、22日的4 : 45重启smb

45 4 1,10,22 * * /etc/init.d/smb restart

# 实例8:每周六、周日的1 : 10重启smb

10 1 * * 6,0 /etc/init.d/smb restart

# 实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb

0,30 18-23 * * * /etc/init.d/smb restart

# 实例10:每星期六的晚上11 : 00 pm重启smb

0 23 * * 6 /etc/init.d/smb restart

# 实例11:每一小时重启smb

* */1 * * * /etc/init.d/smb restart

# 实例12:晚上11点到早上7点之间,每隔一小时重启smb

* 23-7/1 * * * /etc/init.d/smb restart
更新时间: 9/22/2020, 3:13:23 AM