nginx重启报找不到nginx.pid的解决方法

文章详细介绍了Nginx的管理命令,如使用`nginx-sstop`快速停止,`nginx-sreload`平滑重启以应用新的配置,以及`nginx-sreopen`用于重新打开日志文件。在处理日志时,由于`nginx.pid`文件在停止nginx后可能被删除,所以`reopen`或`reload`命令会找不到该文件导致报错。正确的启动命令是直接执行`nginx`或指定配置文件。此外,文章强调了`reopen`和`reload`并不用于启动,而是需要在Nginx运行时使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

nginx被停止(nginx -s stop)或者直接杀掉了进程(kill -9 nginx的进程号)后,调用命令(nginx -s reload 或者 nginx -s reopen)会报错:无法找到 “var/run/nginx.pid”文件。

这句话中,有好几个知识点,也包含了一些错误,错误得把reload或者reopen当做了启动的命令。来依次总结一下:

1.nginx的常用命令

停止:

  • 直接杀nginx进程。 ps aux|grep nginx 查看nginx的主进程号, 调用 kill -9 nginx的进程号 来强制停止nginx。(还有 ”kill -quit nginx的进程号” 来从容停止nginx, ”kill -term nginx的进程号”来快速的停止nginx)
  • 调用 nginx -s stop 快速停止nginx
  • 调用 nginx -s quit 完整有序的停止nginx

启动:

进入nginx安装目录/sbin/下执行

nginx 或者 nginx -c 特定位置的nginx.conf (一般默认是 nginx -c ./logs/nginx.conf)

重启:

nginx -s reload 平滑的重启。配置重载。

nginx工作中,包括一个master进程,多个worker进程。worker进程负责具体的http等相关工作,master进程主要是进行控制等控制。

nginx -s reload 命令加载修改后的配置文件,命令下达后发生如下事件

1. Nginx的master进程检查配置文件的正确性,若是错误则返回错误信息,nginx继续采用原配置文件进行工作(因为worker未受到影响)

2. Nginx启动新的worker进程,采用新的配置文件

3. Nginx将新的请求分配新的worker进程

4. Nginx等待以前的worker进程的全部请求已经都返回后,关闭相关worker进程

5. 重复上面过程,知道全部旧的worker进程都被关闭掉。

所以,重启之后,master的进程号不变,worker的进程号会改变。

日志分割:

nginx -s reopen 重新打开日志文件。

为什么要切割日志?一般Nginx安装好后有些人会打开日志记录,有些人会关闭日志记录,打开日志记录的人一般都会把架设在Nginx上的所有网站日志都存在同一个文件里(比如我存在access.log日志文件里),

这样日积月累所有网站的访问记录就会把日志文件越积越大,当需要查看日志文件的时候一看就是一大串,不方便查找。现在,如果我把每天的日志文件分割开来用相应的日期标识出来这样就大大方便查找了。

我是建议打开日志记录,日志记录里面存放着很多有用的东西。比如:浏览器名称,可以方便你对网站的排版做出调整;IP地址,如果网站收到攻击,你就可以查到那个IP地址。

Linux下我们可以简单的把日志文件mv走,但是你会发现mv走后新的日志文件没有重新生成,一般linux下用的文件句柄,文件被打开情况下你mv走文件,但是原来操作这个文件的进程还是有这个文件的inode等信息,

原进程还是读写原来的文件,因此简单的mv是无法生效的。

因此建议过程如下

1. mv原文件到新文件目录中,这个时候 nginx还写这个文件(写入新位置文件中了)

2. 调用nginx -s reopen用来打开日志文件,这样nginx会把新日志信息写入这个新的文件中

这样完成了日志的切割工作, 同时切割过程中没有日志的丢失。

测试当前配置文件是否正确: nginx -t

测试指定配置文件是否正确: nginx -t 指定配置文件路径

2.var/run/nginx.pid文件

首先 var/run这个目录是干嘛用的?

此文件夹包含描述系统启动以来系统信息的数据。此文件夹下的文件必须在启动过程初期清除(删除或归零)。程序可以在/var/run下有自己的子文件夹。原先放在/etc下的进程标识(PID)文件必须放

/var/run里面。PID文件的命名惯例是.pid。所以,nginx的PID文件名为/var/run/nginx.pid

nginx.pid存放的是nginx的master进程的进程号。

3.为什么会报错

nginx被停止时,var/run/nginx.pid被删除了。 而 reopen和 reload命令需要通过nginx.pid获取进程号,会去找var/run.nginx.pid ,如果不存在,就报错了。

4.总结

reopen是在nginx启动的情况给做分割日志用的, reload也是在nginx启动的情况下做平滑重启的,他们都依赖于nginx进程存在的情况下。 并不是字面上启动或打开的意思。

真正的启动命令是: nginx 或者 nginx -c 指定目录的配置文件 nginx.conf。 查看进程存在即表明启动成功,之后再调用reload和reopen就不会报错了。

参考链接:http://www.cnblogs.com/happySmily/p/6003579.html

### Nginx 进程 ID 文件(`nginx.pid`)的路径与生成位置 Nginx 的 `nginx.pid` 文件是用于记录主进程 ID 的文件,通常在启动或重新加载配置时生成。以下是关于 `nginx.pid` 文件路径和运行时生成位置的相关信息: 1. 默认情况下,`nginx.pid` 文件的路径由 Nginx 配置文件中的 `pid` 指令指定。如果未明确设置该指令,则默认路径为 `/usr/local/nginx/logs/nginx.pid` 或 `/var/run/nginx.pid`,具体取决于操作系统和安装方式[^1]。 2. 在配置文件中,可以通过以下方式修改 `nginx.pid` 文件的路径: ```nginx pid /自定义路径/nginx.pid; ``` 例如,将路径更改为 `/var/run/nginx.pid`,需要在 `nginx.conf` 文件中添加或修改如下行: ```nginx pid /var/run/nginx.pid; ``` 3. 如果发现 `nginx.pid` 文件缺失,可能是由于以下原因: - Nginx 服务未正常启动。 - 配置文件中未正确设置 `pid` 指令。 - 权限问题导致无法写入指定路径。 4. 若要重新生成 `nginx.pid` 文件,可以尝试以下方法: - 确保配置文件中已正确设置 `pid` 指令。 - 使用以下命令重新加载配置并启动 Nginx 服务: ```bash /path/to/nginx/sbin/nginx -c /path/to/nginx/conf/nginx.conf ``` 其中 `/path/to/nginx` 是 Nginx 的安装路径[^2]。 5. 在实际操作中,可以通过以下步骤验证 `nginx.pid` 文件是否生成: - 切换到日志目录(如 `/usr/local/nginx/logs/` 或 `/var/run/`)。 - 执行 `ll` 命令查看文件列表,确认 `nginx.pid` 文件是否存在。 6. 如果需要动态调整 `nginx.pid` 文件路径而不重启服务,可以使用 `nginx -s reload` 命令重新加载配置文件[^3]。 ```bash cd /usr/local/nginx/sbin/ ./nginx -s reload ``` ### 注意事项 - 确保指定路径具有写入权限,否则可能导致 `nginx.pid` 文件无法生成。 - 如果仍然无法生成 `nginx.pid` 文件,建议检查 Nginx 日志文件(如 `error.log`),以获取更多错误信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是空空呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值