nginx.service: Failed to read PID from file /run/n

2019-02-02 15:03发布

问题:

I'm working through https://www.digitalocean.com/community/tutorials/how-to-serve-django-applications-with-uwsgi-and-nginx-on-ubuntu-16-04. I've completed the tut but I'm getting a 502 error.

My nginx server block configuration file:

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 error log shows:

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"

It looks to me that uwsgi is running ok:

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

How can I fix this?

edit:

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:~#

回答1:

That warning with the nginx.pid file is a know bug (at least for Ubutnu if not for other distros as well). More details here: https://bugs.launchpad.net/ubuntu/+source/nginx/+bug/1581864

Workaround (on a ssh console, as root, use the commands bellow):

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 

Then check if you still see that nginx.pid error and also if nginx is actually running and if you can connect to port 80 on your server.

I would also check if this actually exists and the permissions on it:

/run/uwsgi/mysite3.sock

If nginx is running and uWSGI is running as well then I guess it's a configuration problem

I understand you want to use Django so I would recommend to review your actual configuration and compare it with the one from here:

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

I hope it helps!