02-nginx信号量
刚才完了nginx的编译,nginx的编译还是挺简单的。控制nginx:重启、关闭。只有孤零零的一个二进制文件nginx

通过信号来控制它,Linux操作系统进程与进程之间通过信号来通信。荷兰的一位计算机科学家通过火车轨道的红绿灯产生灵感提出了信号这个概念。
nginx的官方command line的地址已被改为:https://www.nginx.com/resources/wiki/start/topics/tutorials/commandline/
Nginx信号量


nginx确实在运行,不过是子进程(worker process)在运行,主进程(master process)并没有在运行,看来上节启动nginx主进程(master process)还存在着问题。

注意主进程的文件不直接响应浏览器的请求,主进程是用来管理子进程的。子进程响应浏览器的请求,主进程负责影响子进程,或者是紧急地杀死子进程。所以子进程叫worker,才是真正的工作者。
主进程和子进程的关系

杀死子进程不能用很暴力的pkill -9,你要是在工作中特别是访问量很大的网站不能这么暴力来的。很多人正在下单子,但是你这个进程啪一下给人家关了,怎么办,钱也扣了。单子还没有写到服务器上。所以引入信号量。

使用kill -INT杀死nginx子进程worker process,worker process的进程号是8889.然后重新执行./sbin/nginx启动nginx就成功了,上节的问题(nginx子进程占用了80端口)解决了。查看之后发现nginx主进程和子进程都启动了。
再杀死主进程12077,再查看发现nginx被关闭了

TERM或者是INT紧急地杀掉nginx进程,轻易不要这样用。QUIT优雅地关闭进程。如果说有人在下载但是没有下载完,你要是一下子给人关了,下载到一半或者是付钱付到一半怎么办。优雅是指某个worker正在工作先不杀你,某个worker空闲着就把先把你杀掉。等这个worker工作完了就杀掉,不要再接收新的请求了,最后这个主进程也消亡了。
要是晚上机器要停个五分钟休息一下,建议就使用优雅的关闭QUIT
HUP 如果使用了HUP这个信号量,将会开启新的worker 进程,工作子进程,新的工作进程会读新的配置文件,然后会优雅地关掉旧的子进程。旧进程间接地几秒钟之后就消失了,新进程全部得到的是新配置文件。HUP将会有一个很好的功能是,nginx下有一个很强大的功能,方便的功能,改完配置文件之后不需要重启主进程(apache就得要重启一下它的主进程)。在nginx下直接HUP一下,你新读取的配置就生效了。新写的配置就生效了。

测试一下
修改nginx的配置文件nginx.conf,增加一个索引文件ab.html.并且在ab.html上写些内容。


在ab.html上加些内容

你没有重启,也没有通过信号软重启。
下面使用信号量HUP软重启。

访问nginx的时候索引文件就变成了ab.html而不是index.html

修改配置文件nginx.conf影响的是索引文件究竟是html文件夹下的哪一个html文件先出来,是ab.html还是index.html。

再试一次
修改配置文件

script的小技巧:把链接赋给它自身。

修改index.html,增加一段script

修改ab.html,把那段script也改成页面不断地到一个根目录,要把自己刷新到根目录。

刷新到根目录当前访问的不正是ab.html吗?修改了配置文件把它改成index.html但是一直没生效是因为没有重启。


修改了配置文件之后为什么不立即生效?你怎么过了好几秒钟才生效,为什么不立即生效啊?这就是我们所说的优雅。因为这个页面用JS自己刷新自己,刷新的速度是非常快的,导致它那个进程压根就没有结束,没有结束那它就得在那里运行着了。
再一次把nginx.conf改到ab.html,让它优雅地重启。这次重启达到的效果:重读最新的配置文件。所以并不会立即生效,因为我们的JS正在狂刷新,导致它这个nginx的进程压根就没有结束。


中间一直没断过线,已经变过来了。

HUP:你改了配置文件之后,重读配置文件,它就发挥作用了。
USER1。如果你是运维的话,你会经常碰到它。比如:新建了一个日志文件,旧的日志文件要打包存起来。在Linux中,一个文件对应一个节点叫做inode。inode才是在硬盘上/磁盘上那个文件真正的位置,至于那文件名只是表象罢了,就像猪八戒看到白骨精变的那个美女一样。你真正指向的是磁盘上的哪一块文件那就源源不断的对它写啊写,写日志。日志备份很容易,给它改一下名字就完了。这样不行,因为你在对日志文件给名字,但是这个文件一直被nginx进程打开,就算你改了名,它还是打开的那个文件描述符,还是指向这块磁盘空间,还是指向这块的磁盘文件。就算你改名字了,它还是往这块磁盘写。就算你把它删了,它还是往这个inode上写。所以应该这样做:
把旧的日志文件a重新改成a.bak保存这没错,同时还得再重新建立一个a文件,同时还得好声好气告诉nginx这里有一个新的日志文件a让它去读这一块,来读最新的日志文件。
所以在日志切割的时候


每秒的访问速度很快,访问nginx的速度很快,访问次数在不断的增加。
你更改你的,我给日志文件改个名字,比如说用日期来做备份。很奇怪,日志文件的名字已经被改了,但是它的文件大小还在不断地增大。


它的文件大小还在不断地增大。这是Linux文件系统的特殊之处。因为它真正指向磁盘上的那个东西是叫节点,至于名字是无所谓,你改了名字又如何呢?节点还是那个节点,这个进程还是冲着那个节点写,导致你改了名字还是往那个节点写。
新增一个日志文件:access.log之后


access.log的大小根本没有发生变化。真正指向磁盘的文件是用了inode节点,而不是说光靠一个文件名。现在你是把文件名改了,但是linux系统根本不买账,进程根本不买账。所以我就是刚才打开的进程一直往里面写。

要想备份日志文件,就得使用信号量USR1。



旧的配置文件access.log.0305已经不变了,写新的配置文件access.log上去了。开发还用的少一些,如果是运维,老板说这个日志每天晚上你得备份起来,并且第二天写新日志上,这个时候就得靠USR1了。
USR2。平滑地升级。比如说nginx用的是1.4,过几天用1.6了,1.6重新编译的话,把日志文件又复制到/usr/local/nginx下面去了。一复制呢,就得重新启动这个新进程。新进程一启动,旧进程怎么办,使用信号量USR2。这个新进程将会控制旧进程里面的东西,如果有访问旧进程的,这一次你访问完毕了你就结束吧,你旧的别想再有机会启动了,后来都是这个1.6的新版本在重新启动,响应新的请求。所以USR2和WINCH配合起来用于升级的时候用。
不用查进程号也可以kill的方法。其实说到底还是离不开进程号,只是变通一下罢了。


Linux内核是根据进程号管理的。不想老是查看进程号,可以查看它的pid文件,它的pid文件只是把进程号记录下来了。也可以把进程文件的进程号作为参数赋给kill

虚拟目录的配置:基于ip的虚拟主机,基于端口的虚拟主机,基于域名的虚拟主机。
02-nginx信号量的更多相关文章
- 02·nginx进阶·服务优化配置管理
企业场景常用的Nginx http功能模块汇总 ngx_ http_ core_ module 包括-些核心的http 参数配置,对应Nginx的配置为HTTP区块部分 ngx_ http _acce ...
- Nginx教程--02.Nginx虚拟主机的配置
1.Nginx虚拟主机的配置 1.1 在conf目录下,使用命令 : vim nginx.conf 对上图解释: //全局区 worker _processes 1; //表示当前有1个工作的子进程, ...
- 02 - nginx - 反向代理、限速
一.Nginx反向代理 代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器. 代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务器的硬盘中, ...
- nginx信号量
nginx信号说明相关说明 信号名称 作用 TERM,INT 快速关闭 QUIT 从容关闭 HUP 重新加载配置,用新的配置开始新的工作进程,从容关闭旧的工作进程 USR1 重新打开日志文件 USR2 ...
- 02 . Nginx平滑升级和虚拟主机
Nginx虚拟主机 在真实的服务器环境,为了充分利用服务器资源,一台nginx web服务器会同时配置N个虚拟主机,这样可以充分利用服务器的资源,方便管理员的统一管理 配置nginx虚拟主机有三种方法 ...
- nginx反向代理+负载均衡+url重写+ssl认证
Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄 ...
- 从刚刚「简书」平台的短暂异常,谈Nginx An error occurred报错~
09.26简书平台的短暂异常 An error occurred. Sorry, the page you are looking for is currently unavailable. Plea ...
- 使用Nginx和Logstash以及kafka来实现网站日志采集的详细步骤和过程
使用Nginx和Logstash以及kafka来实现网站日志采集的详细步骤和过程 先列出来总体启动流程: (1)启动zookeeper集群(hadoop01.hadoop02和hadoop03这3台机 ...
- nginx 基础文档
Nginx基础 1. nginx安装 2. nginx 编译参数详解 3. nginx安装配置+清缓存模块安装 4. nginx+PHP 5.5 5. nginx配置虚拟主机 6. ngi ...
- [nginx] 网上最全面nginx教程(近100篇文章整理)
转载:http://bbs.linuxtone.org/thread-25588-1-1.html Nginx基础 1. nginx安装 2. nginx 编译参数详解 3. nginx安装配置 ...
随机推荐
- (一)Nginx正向代理与反向代理
引言:身为前端开发人员来说对于Nginx的作用或许很少听到,这个东西是后端使用的,Nginx对前端而言意味着什么,有什么用呢?大白会整理出几篇文章给大家细细道来. 1.正向代理的概念 正向代理,也就是 ...
- 【转载】VC获取MAC地址的4种方法
From:http://blog.csdn.net/pdfmaker/article/details/465748 有需求才有创造,有了问题才会想着去解决,那么我这里的获取MAC地址的第4种方法也是在 ...
- 【数据库】SQLite学习
http://www.cnblogs.com/fnng/archive/2013/05/26/3099547.html
- Python笔记-3
一.文件的操作 1.文件的读.写.新增 读文件的获取句柄的语法:f=open('path/file') 句柄的理解: <_io.TextIOWrapper name='/root/myfile/ ...
- opencv之图像阈值化处理
一.函数简介 1.threshold-图像简单阈值化处理 函数原型:threshold(src, thresh, maxval, type, dst=None) src:图像矩阵 thresh:阈值 ...
- 一起来看CORE源码(一) ConcurrentDictionary
先贴源码地址 https://github.com/dotnet/corefx/blob/master/src/System.Collections.Concurrent/src/System/Col ...
- 剑指offer-第五章优化时间和空间效率(从1到n的整数中1出现的次数)
题目:输入一个整数n,从1到n这n个十进制整数中1出现的次数. 思路1:对1到n中的任意一个数i对其进行求余数来判断个位是否为1,然后再求除数,判断十位是否为1.统计出1的个数.然后对1到n用一个循环 ...
- js对象原型链
JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象.这个对象的所有属性和方法,都会被构造函数的所拥有. 这也就意味着,我们可以把所有对象实例需要共享的属性和方 ...
- centos6.x 配置bond
centos6.x 配置bond centos6.x 配置bond1 物理网卡配置2 bond0网卡配置3 查看bond0网卡状态 摘要: centos6.x下使用双网卡配置bond0, centos ...
- php中 curl模拟post发送json并接收json(转)
本地模拟请求服务器数据,请求数据格式为json,服务器返回数据也是json. 由于需求特殊性, 如同步客户端的批量数据至云端, 提交至服务器的数据可能是多维数组数据了. 这时需要将此数据以一定的数据 ...