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