Starting uWSGI instance fails with code 203

2019-08-03 22:48发布

问题:

I want to deploy my Flask app on Ubunut 16.04 with nginx and uWSGI but whenever I do sudo systemctl start nebulon I don't get an error but the status says the following:

nebulon.service - uWSGI instance to serve nebulon
   Loaded: loaded (/etc/systemd/system/nebulon.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sat 2017-09-16 18:08:35 UTC; 5s ago
  Process: 18718 ExecStart=/nebulonapp/nebulon.sock --ini /nebulonapp/nebulon.ini (code=exited, status=203/EXEC)
 Main PID: 18718 (code=exited, status=203/EXEC)

nebulon.service:

[Unit]
Description=uWSGI instance to serve nebulon
After=network.target

[Service]
User=nebulonuser
Group=www-data
WorkingDirectory=/nebulonapp
ExecStart=/nebulonapp/nebulon.sock --ini /nebulonapp/nebulon.ini

[Install]
WantedBy=multi-user.target

In /nebulonapp I have the nebulon.ini:

[uwsgi]
chdir=/nebulonapp/
wsgi-file = wsgi.py
callable = app
plugin=python35

master = true
processes = 5

socket = nebulon.sock
chmod-socket = 666
vacuum = true

die-on-term = true

The nebulon.sock is in /nebulonapp but it is empty. The status of uWSGI is the following:

uwsgi.service - LSB: Start/stop uWSGI server instance(s)
   Loaded: loaded (/etc/init.d/uwsgi; bad; vendor preset: enabled)
   Active: active (exited) since Sat 2017-09-16 18:22:53 UTC; 10s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 18828 ExecStop=/etc/init.d/uwsgi stop (code=exited, status=0/SUCCESS)
  Process: 18854 ExecStart=/etc/init.d/uwsgi start (code=exited, status=0/SUCCESS)

Sep 16 18:22:53 nebulon systemd[1]: Stopped LSB: Start/stop uWSGI server instance(s).
Sep 16 18:22:53 nebulon systemd[1]: Starting LSB: Start/stop uWSGI server instance(s)...
Sep 16 18:22:53 nebulon uwsgi[18854]:  * Starting app server(s) uwsgi
Sep 16 18:22:53 nebulon uwsgi[18854]:    ...done.
Sep 16 18:22:53 nebulon systemd[1]: Started LSB: Start/stop uWSGI server instance(s).

Testing uWSGI with the following command works though.

uwsgi --socket 0.0.0.0:5000 --plugin-python3 --protocol=http -w wsgi:app

Thanks for your help.

回答1:

The issue is with permissions. The guide you are following from digital ocean is missing a crucial step - nginx uses the www-data group to create the socket, and because of that you need to give ownership of your project folder to that group and make sure the user you are executing with is a part of that.

Simply, run these 2 commands

chown -R sammy:www-data /home/sammy/<project>/*

usermod -aG www-data sammy