1

Trying to start a service to run gunicorn as backend server for Flask, not working. Running nginx as frontend server for React, working.

Server:

  Virtualization: vmware
  Operating System: Red Hat Enterprise Linux 8.4 (Ootpa)
  CPE OS Name: cpe:/o:redhat:enterprise_linux:8.4:GA
  Kernel: Linux 4.18.0-305.3.1.el8_4.x86_64
  Architecture: x86-64

Service file in /etc/systemd/system/myservice.service:

[Unit]
Description="Description"
After=network.target

[Service]
User=root
Group=root
WorkingDirectory=/home/project/app/api
ExecStart=/home/project/app/api/venv/bin/gunicorn -b 127.0.0.1:5000 api:app
Restart=always

[Install]
WantedBy=multi-user.target

/app/api:

-rwxr-xr-x. 1 root root 2018 Jun  9 20:06 api.py
drwxrwxr-x+ 5 root root  100 Jun  7 10:11 venv

Error message:

● myservice.service - "Description"
 Loaded: loaded (/etc/systemd/system/myservice.service; enabled; vendor preset: disabled)
  Active: failed (Result: exit-code) since Thu 2021-06-10 19:01:01 CEST; 5s ago
  Process: 18307 ExecStart=/home/project/app/api/venv/bin/gunicorn -b 127.0.0.1:5000 api:app (code=exited, status=203/EXEC)
 Main PID: 18307 (code=exited, status=203/EXEC)

Jun 10 19:01:01 xxxx systemd[1]: myservice.service: Service RestartSec=100ms expired, scheduling restart.
Jun 10 19:01:01 xxxx systemd[1]: myservice.service: Scheduled restart job, restart counter is at 5.
Jun 10 19:01:01 xxxx systemd[1]: Stopped "Description".
Jun 10 19:01:01 xxxx systemd[1]: myservice.service: Start request repeated too quickly.
Jun 10 19:01:01 xxxx systemd[1]: myservice.service: Failed with result 'exit-code'.
Jun 10 19:01:01 xxxx systemd[1]: Failed to start "Description".

Tried, not working:

  • Adding Environment="PATH=/home/project/app/api/venv/bin" under [Service]
  • $ systemctl reset-failed myservice.service
  • $ systemctl daemon-reload
  • Reboot, ofc.

Tried, working:

  • Running (as root) /home/project/app/api/venv/bin/gunicorn -b 127.0.0.1:5000 api:app while in /app/api directory

Does anyone know how to fix this problem?

Erik
  • 11
  • 3

1 Answers1

0

Typically enough, I figured it out shortly after posting this issue.

SELinux is messing with permissions for files and directories, so for anyone experiencing the same issue, make sure to test with the following alterings (as root):

$ setsebool -P httpd_can_network_connect on

$ chcon -Rt httpd_sys_content_t /path/to/your/Flask/dir

In my case: $ chcon -Rt httpd_sys_content_t /home/project/app/api

While this is NOT a permanent fix, it's worth a try. Check out the SELinux docs for more permanent solutions.

Erik
  • 11
  • 3