热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Nginx信号控制及命令行介绍、日志切分

1.Nginx服务的信号控制1.1.Nginx服务的信号控制调用命令为kill-signalPIDsignal:即为信号;PID即为获取到的master线程ID1.发送TERMIN

1. Nginx服务的信号控制


1.1.Nginx服务的信号控制

调用命令为 kill -signal PID

signal:即为信号;PID即为获取到的master线程ID

1. 发送TERM/INT信号给master进程,会将Nginx服务立即关闭。

kill -TERM PID / kill -TERM `cat /usr/local/nginx/logs/nginx.pid`
kill -INT PID / kill -INT `cat /usr/local/nginx/logs/nginx.pid`

2. 发送QUIT信号给master进程,master进程会控制所有的work进程不再接收新的请求,等所有请求处理完后,在把进程都关闭掉。

kill -QUIT PID / kill -QUIT `cat /usr/local/nginx/logs/nginx.pid`

3. 发送HUP信号给master进程,master进程会把控制旧的work进程不再接收新的请求,等处理完请求后将旧的work进程关闭掉,然后根据nginx的配置文件重新启动新的work进程

kill -HUP PID / kill -HUP `cat /usr/local/nginx/logs/nginx.pid`

4. 发送USR1信号给master进程,告诉Nginx重新开启日志文件

kill -USR1 PID / kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

5. 发送USR2信号给master进程,告诉master进程要平滑升级,这个时候,会重新开启对应的master进程和work进程,整个系统中将会有两个master进程,并且新的master进程的PID会被记录在 /usr/local/nginx/logs/nginx.pid 而之前的旧的master进程PID会被记录在 /usr/local/nginx/logs/nginx.pid.oldbin 文件中,接着再次发送QUIT信号给旧的master进程,让其处理完请求后再进行关闭。

kill -USR2 PID / kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
kill -QUIT PID / kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`

6. 发送WINCH信号给master进程,让master进程控制不让所有的work进程在接收新的请求了,请求处理完后关闭work进程。注意master进程不会被关闭掉。

kill -WINCH PID /kill -WINCH`cat /usr/local/nginx/logs/nginx.pid`

2. Nginx日志切分


2.1. 通过自定义脚本切割

cat /usr/local/nginx/cut_nginx_log.sh

#!/bin/bash
#此脚本用于自动分割Nginx的日志,包括access.log和error.log
#每天00:00执行此脚本 将前一天的access.log重命名为access-xxxx-xx-xx.log格式,并重新打开日志文件

#Nginx日志文件所在目录
LOG_PATH=/usr/local/nginx/logs/

#获取昨天的日期
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)

#获取pid文件路径
PID=/usr/local/nginx/logs/nginx.pid

#分割日志
#mv ${LOG_PATH}access.log ${LOG_PATH}access-${YESTERDAY}.log
#mv ${LOG_PATH}error.log ${LOG_PATH}error-${YESTERDAY}.log

cp ${LOG_PATH}access.log ${LOG_PATH}access-${YESTERDAY}.log

echo "" > ${LOG_PATH}access.log

#tar -zcf   ${LOG_PATH}access-${YESTERDAY}.tar.gz   ${LOG_PATH}access-${YESTERDAY}.log >/dev/null 2>&1

#tar -zcf   ${LOG_PATH}access-${YESTERDAY}.tar.gz   ${LOG_PATH}error-${YESTERDAY}.log  >/dev/null 2>&1

#rm -rf ${LOG_PATH}access-${YESTERDAY}.log

#rm -rf ${LOG_PATH}error-${YESTERDAY}.log

#向Nginx主进程发送USR1信号,重新打开日志文件
#kill -USR1 `cat ${PID}`

添加执行权限

chmod +x /opt/nginx/cut_nginx_log.sh

设置定时任务

]# crontab -e

 # 输入以下内容并保存

00 00 * * * /bin/bash /usr/local/nginx/cut_nginx_log.sh

 2.2. 利用logrotate管理日志

参考文档:

https://linux.cn/article-4126-1.html

https://cloud.tencent.com/developer/article/1508110

默认centos系统安装自带logrotate

]# rpm -ql logrotate
/etc/cron.daily/logrotate
/etc/logrotate.conf
/etc/logrotate.d
/etc/rwtab.d/logrotate
/usr/sbin/logrotate
/usr/share/doc/logrotate-3.8.6
/usr/share/doc/logrotate-3.8.6/CHANGES
/usr/share/doc/logrotate-3.8.6/COPYING
/usr/share/man/man5/logrotate.conf.5.gz
/usr/share/man/man8/logrotate.8.gz
/var/lib/logrotate
/var/lib/logrotate/logrotate.status

配置文件

# vim /etc/logrotate.d/nginx
/var/log/nginx/*.log #此处为nginx存储日志的地方;
{
daily #指定转储周期为每天,其它可用值为‘monthly’,‘weekly’或者‘yearly’
rotate 30 #转储次数,超过将会删除最老的那一个
missingok #如果日志文件丢失,不要显示错误
compress #通过gzip 压缩转储以后的日志
delaycompress #当前转储的日志文件到下一次转储时才压缩
notifempty #当日志文件为空时,不进行轮转
  create 644 nginx nginx #以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件
  olddir directory /opt/logs/nginx/logs #这个目录必须提前创建好并授予权限
postrotate #执行的指令
if [ -f /var/run/nginx/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx/nginx.pid`
fi
endscript #PID路径根据实际路径填写;
}

 保存好配置文件后,测试效果

]# logrotate -vf /etc/logrotate.d/nginx
access.log access.log.
1 error.log error.log.1

 定时任务执行

]#crontab –e
0 0 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/nginx #每天凌晨00:00自动执行日志切割任务;

logrotate详解:

logrotate 可以直接执行,后面跟配置文件就可以了,如:/usr/sbin/logrotate -f /etc/logrotate.d/nginx

参数:

-v 显示指令执行过程

-d Debug模式(模拟执行),详细显示指令执行过程,便于排错或了解程序执行的情况。

-f 强制执行

-s <状态文件>  使用指定的状态文件

logrotate 的默认配置文件是 /etc/logrotate.conf。主要参数:

daily指定转储周期为每天 

weekly指定转储周期为每周 

monthly指定转储周期为每月 

dateext在文件末尾添加当前日期 

compress通过gzip 压缩转储以后的日志 

nocompress不需要压缩时,用这个参数 

copytruncate先把日志内容复制到旧日志文件后才清除日志文件内容,可以保证日志记录的连续性

nocopytruncate备份日志文件但是不截断 

create mode owner group转储文件,使用指定的文件模式创建新的日志文件 

nocreate不建立新的日志文件 

delaycompress和 compress 一起使用时,转储的日志文件到下一次转储时才压缩 

nodelaycompress覆盖 delaycompress 选项,转储同时压缩。 

errors address专储时的错误信息发送到指定的Email 地址 

ifempty即使是空文件也转储,这个是 logrotate 的缺省选项。 

notifempty如果是空文件的话,不转储 

mail address把转储的日志文件发送到指定的E-mail 地址 

nomail转储时不发送日志文件 

olddir directory转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统 

noolddir转储后的日志文件和当前日志文件放在同一个目录下 

rotate count指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份 

tabootext [+] list让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~ 

size size当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem). 

prerotate/endscript在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行

postrotate/endscript在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行

 

日志格式参数说明

$remote_addr, $http_x_forwarded_for(反向) 记录客户端IP地址
$remote_user 记录客户端用户名称
$request 记录请求的URL和HTTP协议
$status 记录请求状态
$body_bytes_sent 发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“
%B”参数兼容。
$bytes_sent 发送给客户端的总字节数。
$connection 连接的序列号。
$connection_requests 当前通过一个连接获得的请求数量。
$msec 日志写入时间。单位为秒,精度是毫秒。
$pipe 如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”。
$http_referer 记录从哪个页面链接访问过来的
$http_user_agent 记录客户端浏览器相关信息
$request_length 请求的长度(包括请求行,请求头和请求正文)。
$request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
$time_iso8601 ISO8601标准格式下的本地时间。
$time_local 通用日志格式下的本地时间。

3. Nginx的命令行控制

此方式是通过Nginx安装目录下的sbin下的可执行文件nginx来进行Nginx状态的控制,我们可以通过 nginx -h 来查看都有哪些参数可以用:

-?和-h:显示帮助信息

-v:打印版本号信息并退出

-V:打印版本号信息和配置信息并退出

-t:测试nginx的配置文件语法是否正确并退出

-T:测试nginx的配置文件语法是否正确并列出用到的配置文件信息然后退出

-q:在配置测试期间禁止显示非错误消息

-s:signal信号,后面可以跟 :

stop[快速关闭,类似于TERM/INT信号的作用]

quit[优雅的关闭,类似于QUIT信号的作用]

reopen[重新打开日志文件类似于USR1信号的作用]

reload[类似于HUP信号的作用]

-p:prefix,指定Nginx的prefix路径,(默认为: /usr/local/nginx/)

-c:filename,指定Nginx的配置文件路径,(默认为: conf/nginx.conf)

-g:用来补充Nginx配置文件,向Nginx服务指定启动时应用全局的配置

 

越学越感到自己的无知


原文链接:https://www.cnblogs.com/rtnb/p/15755972.html



推荐阅读
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了如何在VSCode中查看运行日志的方法,对于新手来说,需要注意日志文件的设置位置。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 本文介绍了在使用TortoiseSVN的Repo-browser浏览SVN时出现的错误,以及解决方法。文章提到了卸载当前版本、安装较低版本、使用更下一层的路径等解决方案。同时指出该问题可能是客户端与SVN服务端不匹配造成的,且服务端无法升级更高的SVN版本。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • mysql-cluster集群sql节点高可用keepalived的故障处理过程
    本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
author-avatar
找前辈网
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有