nginx-日志切割
脚本
]# vim /scripts/nginx_log_split.sh
#!/usr/bin/env bash
# Author: wanwz
# Date: 2020-08-03
# Comment: Automatically split the log every day
set -euo pipefail
LOG_PATH=/opt/program/nginx/logs
YSDAY=$(date -d "yesterday" +%Y-%m-%d)
mv ${LOG_PATH}/access.log ${LOG_PATH}/access_${YSDAY}.log
kill -USR1 $(cat ${LOG_PATH}/nginx.pid)
]# chmod 755 /scripts/nginx_log_split.sh
]# crontab -e
0 0 * * * /bin/bash /scripts/nginx_log_split.sh
扩展
文件描述符
- 文件描述符是Linux内核为每个打开的文件命名的一个整数标识,内核通过文件描述符来访问文件
- 每一个文件描述符会与一个打开的文件对应
- 不同的文件描述符也可以指向同一个文件
Nginx是一个运行的进程,早已经记录了access.log日志文件,即使路径发生了变化,依然可以定位到,所有如果只是把access.log名字更改了,Nginx还是会向那个文件写内容
信号
- 在Linux系统中是通过信号与正在运行的进程进行通信的
- 有预定好的信号如:SIGHUP,也有自定义信号如USR1
Nginx自定义信号USR1,当进程收到该信号后,重新打开日志文件,因此kill -USR1 nginx.pid会生成一个新的日志文件
参考文档