Nginx启动的坑: nginx: [error] open() “/run/nginx.pid“ failed (2: No such file or directory)

github学习笔记

用什么命令启动的,就需要使用什么工具去管理

使用nginx 启动,使用systemctl管理,之后使用nginx stop关闭会导致报错,反之一样

# 使用nginx命令启动nginx
[root@iZ2ze58f53sxjm9z7mgn5xZ ~]# nginx

# 查看启动状态
[root@iZ2ze58f53sxjm9z7mgn5xZ ~]# ps -aux | grep nginx
root      905155  0.0  0.0 121288  2184 ?        Ss   15:32   0:00 nginx: master process nginx
nginx     905156  0.0  0.2 151824  8208 ?        S    15:32   0:00 nginx: worker process
nginx     905157  0.0  0.2 151824  8212 ?        S    15:32   0:00 nginx: worker process
root      905436  0.0  0.0   9208  1112 pts/0    S+   15:32   0:00 grep --color=auto nginx

# 使用nginx启动的,但是使用systemctl管理,之后会导致命令报错
[root@iZ2ze58f53sxjm9z7mgn5xZ ~]# systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Wed 2022-09-21 17:20:16 CST; 1 day 22h ago

Sep 21 17:20:16 iZ2ze58f53sxjm9z7mgn5xZ systemd[1]: Starting The nginx HTTP and reverse proxy server...
Sep 21 17:20:16 iZ2ze58f53sxjm9z7mgn5xZ systemd[1]: nginx.service: Control process exited, code=exited status=203
Sep 21 17:20:16 iZ2ze58f53sxjm9z7mgn5xZ systemd[1]: nginx.service: Failed with result 'exit-code'.
Sep 21 17:20:16 iZ2ze58f53sxjm9z7mgn5xZ systemd[1]: Failed to start The nginx HTTP and reverse proxy server.

# 报错
[root@iZ2ze58f53sxjm9z7mgn5xZ ~]# systemctl restart nginx
Job for nginx.service failed because the control process exited with error code.
See "systemctl status nginx.service" and "journalctl -xe" for details.

# 重新加载也报错
[root@iZ2ze58f53sxjm9z7mgn5xZ ~]# nginx -s reload
nginx: [error] open() "/run/nginx.pid" failed (2: No such file or directory)

# 停止也会报错
[root@iZ2ze58f53sxjm9z7mgn5xZ ~]# nginx -s stop
nginx: [error] open() "/run/nginx.pid" failed (2: No such file or directory)

# 查看对应的进程文件nginx.pid文件不存,这是因为不是使用systemctl启动的,但是使用systemctl去管理导致的错误
[root@iZ2ze58f53sxjm9z7mgn5xZ ~]# cat /run/nginx.pid
cat: /run/nginx.pid: No such file or directory

# 解决, 查询出nginx的master进程pid
[root@iZ2ze58f53sxjm9z7mgn5xZ ~]# ps -aux | grep nginx | grep master
root      905155  0.0  0.0 121288  2184 ?        Ss   15:32   0:00 nginx: master process nginx

# 将进程pid写入进程管理文件,之后就可以正常停止nginx
[root@iZ2ze58f53sxjm9z7mgn5xZ ~]# echo 905155 > /run/nginx.pid 
[root@iZ2ze58f53sxjm9z7mgn5xZ ~]# nginx -s stop
[root@iZ2ze58f53sxjm9z7mgn5xZ ~]# ps -aux | grep nginx
root      921991  0.0  0.0   9208  1072 pts/0    S+   15:40   0:00 grep --color=auto nginx

# 使用systemctl管理nginx
[root@iZ2ze58f53sxjm9z7mgn5xZ ~]# systemctl start nginx

# 查看状态正常运行
[root@iZ2ze58f53sxjm9z7mgn5xZ ~]# systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2022-09-23 15:40:36 CST; 6s ago
  Process: 922707 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 922705 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 922703 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 922708 (nginx)
    Tasks: 3 (limit: 22997)
   Memory: 4.9M
   CGroup: /system.slice/nginx.service
           ├─922708 nginx: master process /usr/sbin/nginx
           ├─922709 nginx: worker process
           └─922710 nginx: worker process

Sep 23 15:40:36 iZ2ze58f53sxjm9z7mgn5xZ systemd[1]: Starting The nginx HTTP and reverse proxy server...
Sep 23 15:40:36 iZ2ze58f53sxjm9z7mgn5xZ nginx[922705]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Sep 23 15:40:36 iZ2ze58f53sxjm9z7mgn5xZ nginx[922705]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Sep 23 15:40:36 iZ2ze58f53sxjm9z7mgn5xZ systemd[1]: Started The nginx HTTP and reverse proxy server.
<think>我们正在解决Nginx重载时出现的错误:`nginx: [error] open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory)` 根据引用[1][2][3][4]的内容,这个错误通常是因为Nginx无法PID文件。PID文件存储了Nginx主进程的进程ID,用于控制Nginx(如重载、停止)。错误原因可能是: 1. Nginx没有运行,因此没有生成PID文件。 2. PID文件路径配置错误,或者默认路径被更改。 3. 权限问题导致Nginx无法访问PID文件。 4. 配置文件修改后没有正确重启。 我们将按照以下步骤解决: 步骤1:确认Nginx是否正在运行 执行命令:`ps -ef | grep nginx` 如果没有任何nginx进程,说明Nginx没有运行。需要启动Nginx。 步骤2:如果Nginx没有运行,则启动它 使用命令:`sudo /usr/local/nginx/sbin/nginx` (根据你的安装路径) 或者使用系统服务:`sudo systemctl start nginx` (如果配置了systemd服务) 步骤3:如果Nginx已经在运行,那么可能是PID文件路径配置错误 检查Nginx配置文件(通常位于`/usr/local/nginx/conf/nginx.conf`或`/etc/nginx/nginx.conf`)中是否有`pid`指令。 例如:`pid /var/run/nginx/nginx.pid;` 确保该路径与错误信息中的路径一致。 步骤4:检查PID文件所在目录是否存在,以及权限是否正确 如果配置的PID文件路径是`/var/run/nginx/nginx.pid`,那么需要确保目录`/var/run/nginx`存在,并且Nginx进程有写入权限。 创建目录并设置权限: ```bash sudo mkdir -p /var/run/nginx sudo chown -R www-data:www-data /var/run/nginx # 根据你的Nginx运行用户调整,常见的用户有www-data, nginx等 ``` 然后重启Nginx。 步骤5:使用指定配置文件启动Nginx(如果之前没有正确启动) 如果之前启动时没有指定配置文件,可以使用: ```bash sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ``` 步骤6:重载Nginx配置 启动后,使用以下命令重载: ```bash sudo /usr/local/nginx/sbin/nginx -s reload ``` 另外,根据引用[4]的建议,在修改配置文件后,应该先测试配置文件的正确性: ```bash sudo /usr/local/nginx/sbin/nginx -t ``` 如果测试通过,再重载或重启。 如果以上步骤不能解决,我们可以尝试重新启动Nginx(会停止服务再启动): ```bash sudo /usr/local/nginx/sbin/nginx -s stop sudo /usr/local/nginx/sbin/nginx ``` 注意:`/var/run`是一个临时目录,重启系统后可能会丢失。因此,建议将PID文件放在持久化目录中,例如:`/usr/local/nginx/logs/nginx.pid`,并在配置文件中设置: pid /usr/local/nginx/logs/nginx.pid; 最后,确保每次修改配置文件后都使用`nginx -t`测试,然后使用`nginx -s reload`重载。 现在,我们一步步操作: 1. 检查Nginx进程: ```bash ps -ef | grep nginx ``` 2. 如果没有运行,启动Nginx: ```bash sudo /usr/local/nginx/sbin/nginx ``` 3. 如果已经运行,检查配置文件中的`pid`路径,并确保目录存在且权限正确。 4. 如果目录不存在,创建并设置权限: ```bash sudo mkdir -p /var/run/nginx sudo chown -R www-data:www-data /var/run/nginx # 或者你的实际用户,比如nobody ``` 5. 重启Nginx(先停止再启动): ```bash sudo /usr/local/nginx/sbin/nginx -s stop sudo /usr/local/nginx/sbin/nginx ``` 6. 重载配置: ```bash sudo /usr/local/nginx/sbin/nginx -s reload ``` 如果问题仍然存在,请检查Nginx错误日志(通常在`logs/error.log`)以获取更多信息。 根据引用[4]的经验,建议将PID文件路径改为持久化目录,避免临时目录被清空。 下面,我们修改配置文件,将PID文件放在持久化目录中(例如Nginx的logs目录): 1. 打开配置文件:`sudo vi /usr/local/nginx/conf/nginx.conf` 2. 在顶部添加一行:`pid /usr/local/nginx/logs/nginx.pid;` 3. 保存并退出。 4. 创建logs目录(如果不存在):`sudo mkdir -p /usr/local/nginx/logs` 5. 设置logs目录权限:`sudo chown -R www-data:www-data /usr/local/nginx/logs` (根据你的Nginx用户) 6. 测试配置:`sudo /usr/local/nginx/sbin/nginx -t` 7. 重启Nginx:`sudo /usr/local/nginx/sbin/nginx -s stop` 然后 `sudo /usr/local/nginx/sbin/nginx` 这样,PID文件就会在持久化目录中,避免系统重启后丢失。 请按照这些步骤操作,应该能解决问题。</think>要解决Nginx重载时出现的`nginx: [error] open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory)`错误,请按照以下步骤操作: ### 解决步骤 1. **启动Nginx服务(如果未运行)** ```bash sudo /usr/local/nginx/sbin/nginx ``` 如果Nginx未运行,启动服务会自动创建PID文件[^1][^3] 2. **验证配置文件路径** ```bash sudo /usr/local/nginx/sbin/nginx -t ``` 检查输出中是否包含`pid`指令的正确路径(如`pid /var/run/nginx/nginx.pid;`)[^4] 3. **创建PID目录并设置权限** ```bash sudo mkdir -p /var/run/nginx sudo chown -R nginx:nginx /var/run/nginx # 或实际运行Nginx的用户 sudo chmod 755 /var/run/nginx ``` 4. **使用完整路径重载配置** ```bash sudo /usr/local/nginx/sbin/nginx -s reload ``` 5. **如果仍失败,手动指定配置文件启动** ```bash sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ``` ### 持久化解决方案 修改Nginx配置文件,将PID文件存放到持久化目录: 1. 编辑配置文件: ```bash sudo vi /usr/local/nginx/conf/nginx.conf ``` 2. 在`main`部分添加: ```nginx pid /usr/local/nginx/logs/nginx.pid; ``` 3. 创建目录并授权: ```bash sudo mkdir -p /usr/local/nginx/logs sudo chown nginx:nginx /usr/local/nginx/logs ``` 4. 重启服务: ```bash sudo /usr/local/nginx/sbin/nginx -s stop sudo /usr/local/nginx/sbin/nginx ``` ### 验证是否解决 ```bash # 检查PID文件是否存在 ls -l /var/run/nginx/nginx.pid # 查看进程状态 ps aux | grep nginx ``` > **关键点**:此错误通常表明Nginx未运行或PID路径配置错误。通过启动服务+修正路径可解决90%的案例[^2][^4]。使用持久化目录可避免系统重启后PID文件丢失。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值