目录
日志可以每天都进行切割重新写,保留固定的时间后也可使用 find 删除。
1、切割日志的配置(用系统自带的 logrotate )
/etc/logrotate.d 下面再建立一个配置文件,这里新建名为nginx
( 中途有 ctrl+Z 暂停过任务,后面fg恢复的 )
1.1 配置文件参数解释:
/usr/local/nginx/logs/*log 把目录下所有的log结尾的文件都进行切割
daily #每天切割。 日志文件轮转周期,可用值为: daily / weekly / yearly
rotate 30 # 设置轮转次数,即最多存储 n 个归档日志,超过会删除最早的归档日志
missingok #忽略错误
notifempty #当日志为空时,不切
compress #使用gzip压缩
minsize 5M #限制条件,大于5M的日志文件才进行分割,否则不操作
dateext # 以当前日期作为命名格式
引入脚本命令
sharescripts
XXXX 中间是脚本、命令部分
endscript
postrotate 表示当切割完成之后要执行的命令。
这里kill是因为 日志mv挪走以后,始终还是在写旧的日志文件。通过给nginx 一个reopen信号以后才会自动新建一个新的日志文件。
有时候因为要在容器外kill ,可以用ps+awk来kill
ps -ef |grep "openresty/nginx/nginx" | awk '/master/{print $2}'
1.2 重新打开日志文件的 kill -USR1 信号
注意:这里的kill 的作用并不是用来杀掉进程。
kill杀进程只是作用之一,这里是通过kill向nginx的master进程发送特定的信号来进行对nginx的控制。
kill -USR1 PID 起到的效果相当于 nginx -s reopen 重载日志文件
nginx信号的接收和处理
nginx 主进程在启动完成后会进入等待状态,负责响应各类系统消息,如SIGCHLD、SIGHUP、SIGUSR2等。
Nginx信号简介
(master)主进程支持的信号
- TERM, INT: 立刻退出 相当于 nginx -s stop
- QUIT: 等待工作进程结束后再退出 相当于 nginx -s quit
- KILL: 强制终止进程
- HUP: 重新加载配置文件,使用新的配置启动工作进程,并逐步关闭旧进程。相当于nginx -s reload
- USR1: 重新打开日志文件 相当于 nginx -s reopen
- USR2: 启动新的主进程,实现热升级
- WINCH: 逐步关闭工作进程
(worker)工作进程支持的信号
- TERM, INT: 立刻退出
- QUIT: 等待请求处理结束后再退出,优雅停止
- USR1: 重新打开日志文件
nginx -t 时候也可以用 nginx -c xxx.conf -t 检测nginx配置的正确性。
# 在重启或者重载配置文件前需要检查nginx配置的正确性
nginx -c /path/to/nginx.conf -t
# 正常输出示例
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# 异常输出示例
nginx: [emerg] unknown directive "eerror_log" in /etc/nginx/nginx.conf:3
nginx: configuration file /etc/nginx/nginx.conf test failed
2、强制手动切割日志
logrotate -f /etc/logrotate.d/nginx
(这里切割配置文件名起的是nginx)
去看设置的文件夹下已经发生了切割
3、配置定时切割任务
crontab -e
0 */1 * * * /usr/sbin/logrotate -f /etc/logrotate.d/nginxvideo
这里是每个小时 0 分时候使用该nginxvideo配置文件进行切割