supervisorctl всегда сообщает об ошибке: ОШИБКА (такого файла нет)

Я развернул свой проект django с супервизором uwsgi и nginx. но я добавил свою программу, как указано выше, в /etc/supervisord.conf.

[program:JZAssist]
command=-E uwsgi --ini /home/work/xxxx/uwsgi.ini
directory=/home/work/xxxx
startsecs=0
stopwaitsecs=0
autostart=true
autorestart=true

и мой контент uwsgi.ini:

[uwsgi] 
socket = :8000 
chdir = /home/work/xxxx 
module = xxxx.wsgi 
master = true 
processes = 4 
vacuum = true 

хххх это название моего проекта.

я бегу supervisorctl -c /etc/supervisord.conf restart all в cmd. И это показывает

xxxx: ERROR (no such file)

/tmp/supervisord.log часть содержимого:

2017-02-24 23:31:41,433 INFO gave up: JZAssist entered FATAL state,         too many start retries too quickly
2017-02-24 23:52:29,940 WARN Failed to clean up '/tmp/JZAssist-stderr---supervisor-goPZyS.log'
2017-02-24 23:52:29,940 WARN Failed to clean up '/tmp/JZAssist-stdout---supervisor-WtfJcp.log'
2017-02-24 23:52:57,535 WARN Failed to clean up '/tmp/JZAssist-stderr---supervisor-goPZyS.log'
2017-02-24 23:52:57,535 WARN Failed to clean up '/tmp/JZAssist-stdout---supervisor-WtfJcp.log'
2017-02-24 23:52:57,541 INFO RPC interface 'supervisor' initialized
2017-02-24 23:52:57,541 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2017-02-24 23:52:57,542 INFO daemonizing the supervisord process
2017-02-24 23:52:57,543 CRIT could not write pidfile /tmp/supervisord.pid
2017-02-24 23:52:58,544 INFO spawnerr: can't find command '-E'
2017-02-24 23:52:59,546 INFO spawnerr: can't find command '-E'
2017-02-25 00:46:59,234 WARN Failed to clean up '/tmp/JZAssist-stderr---supervisor-goPZyS.log'
2017-02-25 00:46:59,234 WARN Failed to clean up '/tmp/JZAssist-stdout---supervisor-WtfJcp.log'

Я не знаю, почему он будет сообщать об ошибке, как это. Я могу запустить свой проект django с runserver.so что файл отсутствует?

4 ответа

На ваше command= строка, вы указали программу для запуска как -E, который руководитель не может найти для выполнения.

При создании файла для задания командная строка должна быть исполняемой как команда оболочки и не должна полагаться на внутренние команды для данной оболочки. Например, у меня были проблемы с тем, что началось с:

source /path/to/python/virtual/environment/bin/activate && ...

но source это встроенный Bash. Мне нужно было изменить это, чтобы читать:

bash -c 'source /path/to/python/virtual/environment/bin/activate && ...

Таким образом, исполняемый файл, который супервизор может найти и запустить, bash,

В вашем случае, кажется, Uwsgi должен быть первым после command=,

Вы упомянули, что вы используете -E флаг для сохранения переменных среды при запуске sudo, но руководитель не понадобится sudo

Я столкнулся с этим сообщением об ошибке, но в моем случае оказалось, что я указал пользователя в своем определении задания, который не был создан на сервере.

      [program:my-task]
user=this-user-didnt-exist

В моем случае проблема заключалась в том, что у меня command="/bin/python3.8 main.py" в моем файле conf.d / mysite.conf.

Когда я удалил "", это сработало.

У меня также была эта проблема при попытке запустить сценарий оболочки через супервизор, вам нужно использовать/bin/sh myscript.sh:

      command=/bin/sh myscript.sh
Другие вопросы по тегам