Spencer Rowland
Spencer Rowland

Reputation: 81

supervisor exiting with ENOENT

I am attempting to deploy a Django web application for the first time using NGINIX, Gunicorn and Supervisor on Digital Ocean Ubuntu 16.04 server. I am following the this linked tutorial.

I am having a trouble configuring Supervisor. When running this command...

sudo supervisorctl status automatedre

I get this error...

automatedre               FATAL     Exited too quickly (process log may have details)

The log file shows this...

supervisor: couldn't exec /home/automatedre/gunicorn_start: ENOENT
supervisor: child process was not spawned
supervisor: couldn't exec /home/automatedre/gunicorn_start: ENOENT
supervisor: child process was not spawned

/home/automatedre/gunicorn_start

#!/bin/bash

NAME="django_automatedre"
DIR=/home/automatedre/automatedre
USER=automatedre
GROUP=automatedre
WORKERS=3
BIND=unix:/home/automatedre/run/gunicorn.sock
DJANGO_SETTINGS_MODULE=automatedre.settings
DJANGO_WSGI_MODULE=automatedre.wsgi
LOG_LEVEL=error

cd $DIR
source ../venv/bin/activate

export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DIR:$PYTHONPATH

exec ../venv/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
  --name $NAME \
  --workers $WORKERS \
  --user=$USER \
  --group=$GROUP \
  --bind=$BIND \
  --log-level=$LOG_LEVEL \
  --log-file=-

/etc/supervisor/conf.d/automatedre.conf

[program:automatedre]
command=/home/automatedre/gunicorn_start
user=automatedre
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/home/automatedre/logs/gunicorn.log

I'm not sure where to go from here. I don't believe it is a file permission issue since I previously changed permission on gunicorn_start with this...

chmod u+x gunicorn_start

Any ideas on where I'm going wrong?

Upvotes: 4

Views: 8465

Answers (3)

Jorge V.
Jorge V.

Reputation: 182

In case someone have this same issue and have already verified that the directory path is OK, go and check that there are no leading spaces on the lines of the configuration file for this specific unit or rule for the program.

wrong:

[program:celerybeat]
   command=/usr/...
   directory=/home/...
   user=...
...

Right

[program:celerybeat]
command=/usr/...
directory=/home/...
user=...

Upvotes: 0

Spencer Rowland
Spencer Rowland

Reputation: 81

I previously left out the text below from the log file because I didn't think it was relevant...mistake.

/home/automatedre/gunicorn_start: 2: /home/automatedre/gunicorn_start: ^M: not found
/home/automatedre/gunicorn_start: 12: /home/automatedre/gunicorn_start: ^M: not found
/home/automatedre/gunicorn_start: 13: cd: can't cd to /home/automatedre/automatedre^M
/home/automatedre/gunicorn_start: 14: /home/automatedre/gunicorn_start: source: not found
/home/automatedre/gunicorn_start: 15: /home/automatedre/gunicorn_start: ^M: not found
/home/automatedre/gunicorn_start: 18: /home/automatedre/gunicorn_start: ^M: not found
/home/automatedre/gunicorn_start: 19: exec: ../venv/bin/gunicorn: not found

I initially created the /home/automatedre/gunicorn_start and /etc/supervisor/conf.d/automatedre.conf in my Brackets text editor on my windows machine which created this issue.

After doing some more digging, I learned that Windows/MS-DOS uses CR+LF to indicate end-of-lines and UNIX uses LF character to indicate line termination (EOL character).

This difference resulted in the ^M at the end of each line causing the file path not found error.

Recreating each file from the terminal with nano solved the issue.

Upvotes: 4

Ralf
Ralf

Reputation: 16485

To get more info you could change LOG_LEVEL=error to LOG_LEVEL=debug.

Upvotes: 0

Related Questions