网站首页 > 技术教程 正文
咱们先来看看 kill -USR1 $(cat $logpath/nginx.pid) 这条命令做了些什么
1 首先确定一下/usr/local/nginx/logs/nginx.pid 这个文件存储的是nginx的pid号, 当启动nginx这个程序时会自动生成这个文件, 当关闭nginx程序时, 这个nginx.pid的文件就会消失。
> # cat /usr/local/nginx/logs/nginx.pid
3958
##################################################################
> # nginx -s stop
> # cat /usr/local/nginx/logs/nginx.pid
cat: /usr/local/nginx/logs/nginx.pid: 没有那个文件或目录
2 $(cat $logpath/nginx.pid)相当与`cat $logpath/nginx.pid` 它拿到的是nginx的进程pid号, 我这里的是3958
那么完整命令为:kill -USR1 3958
-USR1代表什么呢, 我们接着往下看
> # kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
在linux系统中, linux是通过信号与"正在运行的进程"进行通信的。linux系统中, 也有很多预定义好的信号, 像常用的SIGHUP, SIGKILL, SIGSTOP等。
USR1对应的数字选项为 -10, 那么nginx收到USR1的信号后, 它都做了些什么
(1) nginx 的主进程收到USR1信号, 会重新打开日志文件(以nginx配置文件中的日志名称命名, 就是配置文件中access_log项所设置的值, 如果文件不存在, 会自动创建一个新的文件xxx.log)。
> # /usr/local/nginx/logbak.sh
> # ls /usr/local/nginx/logs/
access-20181103.log access.log error-20181103.log error.log nginx.pid
# 执行脚本后
(2) 然后把日志文件的拥有者改为"工作进程(worker进程)", 目的是让worker进程就具备了对日志文件的读写权限(master和worker通常以不同用户运行, 所以需要改变拥有者)。
> # ll /usr/local/nginx/logs/access.log
-rw-r--r--. 1 nginx root 0 11月 3 13:25 /usr/local/nginx/logs/access.log
> # ll /usr/local/nginx/logs/access-20181103.log
-rw-r--r--. 1 root root 204608511 11月 3 10:44 /usr/local/nginx/logs/access-20181103.log
##注意观察这两个文件的所有者不一样
(3) nginx主进程会关闭重名的日志文件(也就是刚才使用mv命令重命名成xxx.log-$date.log的文件), 并通知工作进程使用新打开的日志文件(刚才主进程打开的文件xxx.log)。
具体实现上更细化点就是, 主进程把USR1信号发给worker, worker接到这个信号后, 会重新打开日志文件(也就是配置文件中约定的xxx.log)
3 结合上面的 kill -l 命令补充一下
只有第9种信号(SIGKILL)才可以无条件终止进程, 其他信号进程都有权利忽略。 下面是常用的信号:
HUP 1 终端断线, 重新加载配置文件, 平滑升级 SIGHUP
INT 2 中断(同 Ctrl + C) SIGINT
QUIT 3 退出(同 Ctrl + \) SIGQUIT
KILL 9 强制终止 SIGKILL
USR1 10 自定义信号(通常用于文件热更新) SIGUSR1
TERM 15 终止(如果kill 命令后直接加进程的pid号, 默认选项为-15, 代表终止此进程) SIGTERM
CONT 18 继续(与STOP相反, fg/bg命令) SIGCONT
STOP 19 暂停(同 Ctrl + Z) SIGSTOP
猜你喜欢
- 2024-10-15 每个开发者应该了解的 10 个 Linux 命令
- 2024-10-06 滚动 docker 中的 nginx 日志(docker 滚动更新)
- 2024-10-06 「nginx」四、nginx信号控制(nginx-t)
- 2024-10-06 Linux系统之linux命令大全与基本常识基础教程丨致臻数据
- 2024-10-06 linux安装高性能的web服务器nginx
- 2024-10-06 「 原创 」HTTPS 更加安全,但证书贵?手把手教你免费部署HTTPS
- 2024-10-06 Linux实用命令(linux基础使用命令)
- 2024-10-06 Linux进程管理命令ps、pgrep、pkill、top、lsof、kill等详细说明
- 2024-10-06 十分钟让你学会LNMP架构负载均衡(nlb负载均衡 iis设置)
- 2024-10-06 深入浅出Nginx,如何做到高并发下的高效处理?如何做到热部署?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)