【问题标题】:nginx.service: Failed to read PID from file /run/nginx.pid: Invalid argumentnginx.service:无法从文件 /run/nginx.pid 读取 PID:参数无效
【发布时间】:2017-06-24 00:54:05
【问题描述】:

我正在处理https://www.digitalocean.com/community/tutorials/how-to-serve-django-applications-with-uwsgi-and-nginx-on-ubuntu-16-04。我已经完成了 tut,但出现 502 错误。

我的nginx服务器块配置文件:

server {
listen 80;
server_name 198..xxx.xxx.xxx mysite.org;

location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
    root /home/deploy/mysite3;
}

location / {
    include         uwsgi_params;
    uwsgi_pass      unix:/run/uwsgi/mysite3.sock;
}
}

deploy@server:/etc/nginx/sites-enabled$ sudo systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2017-02-06 17:30:53 EST; 4s ago
  Process: 7374 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)
  Process: 7383 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 7380 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Main PID: 7384 (nginx)
   CGroup: /system.slice/nginx.service
           ├─7384 nginx: master process /usr/sbin/nginx -g daemon on; master_process on
           └─7385 nginx: worker process

Feb 06 17:30:53 server systemd[1]: Starting A high performance web server and a reverse proxy server...
Feb 06 17:30:53 server systemd[1]: nginx.service: Failed to read PID from file /run/nginx.pid: Invalid argument
Feb 06 17:30:53 server systemd[1]: Started A high performance web server and a reverse proxy server.

nginx错误日志显示:

2017/02/06 21:10:32 [error] 7385#7385: *15 upstream prematurely closed connection while reading response header from upstream, client: 64.xxx.xxx.xxx, server: 198.xxx.xxx.xxx, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:/run/uwsgi/mysite3.sock:", host: "mysite.org"

在我看来 uwsgi 运行正常:

Feb 06 17:43:42 server uwsgi[7434]: WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0xc7ac10 pid: 7435 (default app)
Feb 06 17:43:42 server uwsgi[7434]: *** uWSGI is running in multiple interpreter mode ***
Feb 06 17:43:42 server uwsgi[7434]: spawned uWSGI master process (pid: 7435)
Feb 06 17:43:42 server uwsgi[7434]: Mon Feb  6 17:43:42 2017 - [emperor] vassal mysite3.ini has been spawned
Feb 06 17:43:42 server uwsgi[7434]: spawned uWSGI worker 1 (pid: 7439, cores: 1)
Feb 06 17:43:42 server uwsgi[7434]: spawned uWSGI worker 2 (pid: 7440, cores: 1)
Feb 06 17:43:42 server uwsgi[7434]: spawned uWSGI worker 3 (pid: 7441, cores: 1)
Feb 06 17:43:42 server uwsgi[7434]: spawned uWSGI worker 4 (pid: 7442, cores: 1)
Feb 06 17:43:42 server uwsgi[7434]: spawned uWSGI worker 5 (pid: 7443, cores: 1)
Feb 06 17:43:42 server uwsgi[7434]: Mon Feb  6 17:43:42 2017 - [emperor] vassal mysite3.ini is ready to accept requests

我该如何解决这个问题?

编辑:

root@server:~# mkdir /etc/systemd/system/nginx.service.d
root@server:~# printf "[Service]\nExecStartPost=/bin/sleep 0.1\n" > /etc/systemd/system/nginx.service.d/override.conf
root@server:~# systemctl daemon-reload
root@server:~# systemctl restart nginx
root@server:~# systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: en
  Drop-In: /etc/systemd/system/nginx.service.d
           └─override.conf
   Active: active (running) since Tue 2017-02-07 08:18:26 EST; 6s ago
  Process: 10076 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5
  Process: 10084 ExecStartPost=/bin/sleep 0.1 (code=exited, status=0/SUCCESS)
  Process: 10082 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (cod
  Process: 10079 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process
 Main PID: 10083 (nginx)
   CGroup: /system.slice/nginx.service
           ├─10083 nginx: master process /usr/sbin/nginx -g daemon on; master_pr
           └─10085 nginx: worker process

Feb 07 08:18:26 server systemd[1]: Starting A high performance web server and a
Feb 07 08:18:26 server systemd[1]: Started A high performance web server and a r
root@server:~#

【问题讨论】:

    标签: python django ubuntu nginx uwsgi


    【解决方案1】:

    nginx.pid 文件的警告是一个已知的错误(至少对于 Ubutnu 而言,如果不是其他发行版也是如此)。更多细节在这里: https://bugs.launchpad.net/ubuntu/+source/nginx/+bug/1581864

    解决方法(在 ssh 控制台上,以 root 身份使用以下命令):

    mkdir /etc/systemd/system/nginx.service.d
    printf "[Service]\nExecStartPost=/bin/sleep 0.1\n" > /etc/systemd/system/nginx.service.d/override.conf
    systemctl daemon-reload
    systemctl restart nginx 
    

    然后检查您是否仍然看到 nginx.pid 错误,以及 nginx 是否实际运行以及您是否可以连接到服务器上的端口 80。

    我还会检查它是否真的存在以及它的权限:

    /run/uwsgi/mysite3.sock
    

    如果 nginx 正在运行并且 uWSGI 也在运行,那么我猜这是配置问题

    我了解您想使用 Django,因此我建议您查看您的实际配置并将其与此处的配置进行比较:

    http://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html

    希望对你有帮助!

    【讨论】:

    • 我需要先这样做:mkdir /etc/systemd/system/nginx.service.d
    • 我正在使用 apt install nginx 和新的 UBUNTU 16 LTS...并且需要纠正这个错误。如何在没有此错误的情况下安装 NGINX
    • 关于 uWSGI 的段落需要更多解释。我很确定它不是必需的,我也不使用它。
    • 这行得通。当我尝试 printf 语句之前只有一个“sudo”时,我收到了一条权限被拒绝的消息。所以,我必须先进入根目录('sudo su')。当时就被执行了。其余的使用普通的“sudo”。
    • 如果有人来这里使用 openresty 遇到同样的问题。也通过将文件添加为/lib/systemd/system/openresty.service.d/override.conf 来修复
    猜你喜欢
    • 2023-02-05
    • 2017-07-21
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 2022-09-22
    相关资源
    最近更新 更多