停止服务
执行-s stop
指令,查看进程可以知道,第二次启动的进程已经结束,第一次的进程还存在,此时访问服务可以发现第一次的端口服务是正常的
>nginx -s stop >tasklist /FI "IMAGENAME eq nginx.exe" 映像名称 PID 会话名 会话# 内存使用 ========================= ======== ================ =========== ============ nginx.exe 23456 Console 1 9,776 K nginx.exe 58692 Console 1 10,304 K
执行停止指令或重启,发现已经无法启动,同时提示如下错误:
>nginx -s stop nginx: [error] CreateFile() "./logs/nginx.pid" failed (2: The system cannot find the file specified) >nginx -s reload nginx: [error] CreateFile() "./logs/nginx.pid" failed (2: The system cannot find the file specified)
解决办法
查看该目录发现,改文件已经不存在,所有才会提示上述错误,意思就是不能够通过普通方式进行服务退出,这时候可以考虑直接执行taskkill
指令进行处理,执行成功后,再查看对应进程nginx.exe
,发现本地已经不存在对应镜像名称的进程了
>taskkill /F /IM nginx.exe /T 成功: 已终止 PID 50792 (属于 PID 58692 子进程)的进程。 成功: 已终止 PID 58692 (属于 PID 23456 子进程)的进程。 成功: 已终止 PID 23456 (属于 PID 57764 子进程)的进程。 >tasklist /FI "IMAGENAME eq nginx.exe" 信息: 没有运行的任务匹配指定标准。
再次执行start nginx
启动,就能够访问对应修改之后的配置内容
最近一次配置异常
条件:下次服务重启前,不查看错误日志,无法发现问题
服务已经运行,页面能够正常访问到地址http://localhost:7080/
,nginx.conf
配置如下:
......省略....... http { ......省略....... server { listen 7080; server_name localhost; location / { root html; index index.html index.htm; } ......省略....... } }
最近一次修改时,造成配置疏忽:
......省略....... http { ......省略....... server { listen 7080; server_name localhost; location / { root html; # 假定配置错误少些分号;结尾 index index.html index.htm } ......省略....... } }
再次手误启动,无任何提示,运行时访问http://localhost:7080/
,也是正常响应
>start nginx
查看nginx.exe
中进程数也是正常的
>tasklist /FI "IMAGENAME eq nginx.exe" 映像名称 PID 会话名 会话# 内存使用 ========================= ======== ================ =========== ============ nginx.exe 61380 Console 1 1,280 K nginx.exe 59796 Console 1 2,164 K
直到,哪天nginx.exe
结束了程序再次重启,结果就是完了,服务不能用了,查看日志才发现,实际配置文件已经报错,当时在服务配置错误时,未查看系统中是否已经存在nginx
服务前,就再次启动nginx
服务,实际由于异常配置,实际服务并未启动,而是正常情况时的服务并未退出,造成的服务正常的假象
解决办法
善用nginx
常规指令和良好的服务检测习惯
启动服务前,先核查本地是否已经启动服务
>tasklist /FI "IMAGENAME eq nginx.exe"
输出信息: 没有运行的任务匹配指定标准。
,表示不存在对应镜像名称的进程存在服务时,过存在则会输出对应的进程列表清单,
已经存在进程时,对配置进行修改后,可以考虑先使用-t [confpath]
对目标配置文件进行内容检测,不添加参数,默认为nginx.conf
,以下为配置正常时的输出结果,配置异常时,会显示对应的异常配置位置大概位置,便于用户排查
>nginx -t nginx: the configuration file 解压路径\nginx-1.21.1/conf/nginx.conf syntax is ok nginx: configuration file 解压路径\nginx-1.21.1/conf/nginx.conf test is successful
确认配置无误后,使用-s reload
进行服务重启,重启后的进程id和之前老的进程id
是不一样的,可以规避对应的服务存存在假象,同时可以多看看异常日志,一般如果配置异常,日志中,有对应的异常日志输出
重启前
>tasklist /fi "imagename eq nginx.exe" 映像名称 PID 会话名 会话# 内存使用 ========================= ======== ================ =========== ============ nginx.exe 38452 Console 1 17,472 K nginx.exe 47260 Console 1 17,824 K
重启后
>nginx -s reload D:\Program Files\nginx-1.21.1>tasklist /fi "imagename eq nginx.exe" 映像名称 PID 会话名 会话# 内存使用 ========================= ======== ================ =========== ============ nginx.exe 38452 Console 1 17,392 K nginx.exe 22264 Console 1 17,816 K
注意
实际进程不止俩,结束进程时,关联进程列表为,主进程,工作进程以及一个其他进程,上述文章中说的俩仅仅是限定范围到当前服务范围内,不过多延伸
如果想要获取上述例子中的nginx
压缩包,可以评论留言或者私信笔者