2014-11-08 2 views
2

Я пытаюсь настроить приложение в режиме реального времени чат с Laravel 4, как описано здесь: https://xuri.me/2014/09/08/laravel-4-real-time-chat.htmlруководитель не запускается на виртуальном хостинге

У меня есть общий хостинг аккаунт на Hostmonster с выделенным IP-адресом. Я могу использовать SSH на веб-сервере и запускать сервер BrachSocket Ratchet WebSocket с помощью команды Artisan, запускающей ее на порт 8080. Однако у Hostmonster есть время ожидания процесса PHP в течение 2 часов.

Я могу избежать этого, запустив команду Artisan, чтобы запустить WebSocket Server в качестве PHP-Daemon с помощью Supervisor. Супервизор автоматически перезапустит сервер WebSocket, если он остановится. Моя цель - заставить сервер WebSocket работать с Supervisor, используя что-то вроде этого: https://xuri.me/2014/09/09/run-brainsocket-laravel-artisan-command-in-supervisor.html

Я успешно установил Python (2.7.8) с помощью этого метода. Я установил Supervisor с помощью Setuptools с помощью метода easy_install. Я тестировал, что Supervisor был успешно установлен на Python. Я создал конфигурационный файл Supervisor (supervisord.conf).

Часть .bashrc файла показывает Python BINDIR и PYTHONPATH:

экспорт PYTHONPATH = $ HOME/Python/Lib/python2.7/сайт-пакеты: $ PYTHONPATH
экспорт PATH = $ HOME/питон/бен: $ PATH

Когда я вхожу в «supervisord» команду в BINDIR Python, руководитель не запускается и я получаю следующее сообщение об ошибке:

Traceback (самый последний вызов последним): файл "/home3/thecdeor/python/bin/supervisord ", строка 9, в load_entry_point ('supervisor == 3.1.3', 'console_scripts', 'supervisord')()
Файл«/home3/thecdeor/python/lib /python2.7/site-packages/supervisor-3.1.3-py2.7.egg/supervisor/supervisord.py ", строка 366, в главном меню (параметры)
Файл«/home3/thecdeor/python/lib/python2.7/site-packages/supervisor-3.1.3-py2.7.egg/supervisor/supervisord.py ", строка 376, в go d.main()
Файл"/home3/thecdeor/python/lib/python2.7/site-packages/supervisor-3.1.3-py2.7.egg/supervisor/supervisord.py ", строка 70, в основном rlimit_messages = self.options.set_rlimits()
Файл"/home3/thecdeor/python/lib/python2.7/site-packages/supervisor-3.1.3-py2.7.egg/supervisor/options.py ", строка 1316, в set_rlimits se lf.usage (msg% locals())
KeyError: 'min'.

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

Когда я вхожу в команду "supervisorctl" в папке Python BINDIR, я получаю следующее сообщение об ошибке:

UNIX: не ///home3/thecdeor/python/bin/tmp/supervisor.sock нет такого файла

Я сбив с толку этими ошибками. Может ли кто-нибудь помочь? Я бы опубликовал больше ссылок, если бы моя нынешняя репутация позволила мне это сделать. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация о сервере или любая другая информация. Я никогда не писал в StackOverflow раньше, и у меня никогда не было такой проблемы, поэтому я не совсем уверен, что и сколько информации нужно публиковать.

ответ

2

У меня была такая же проблема, и это оказалось проблемой с максимальным количеством процессов, которые супервизор мог создать в моей системе.Этот номер указан в параметре minprocs, определенном в разделе supervisord в supervisor.conf.

По умолчанию супервизор устанавливает этот параметр в 200, что в моем случае представляет собой жесткий предел процессов, которые определенный процесс может создать в моей системе. Из-за этого, вызов функции: resource.setrlimit(resource, limits) в методе set_rlimits из класса ServerOptions определенных в Options модуль (options.py файл) вызывает исключение ValueError.

Решение. Сообщение об ошибке не очень информативно и даже вводит в заблуждение. В любом случае, чтобы решить проблему, я просто уменьшил половину максимального количества процессов, которые супервизор может создать в моей системе.

minprocs=100 ; (min. avail process descriptors;default 200)

Для получения дополнительной информации вы можете взглянуть на documentation модуля ресурсов питона может.

0

Это просто пометка ответа jasg. В файле options Supervisord есть файл options.py в методе set_rlimits

Я попытался установить minprocs = 100 и even = 2, но получил ту же ошибку.

Если вы

ulimit -a | grep -E "open files|max user processes" 

количество открытых файлов должно быть> = чем то, которое вы задаете для minprocs.

Максимальное количество пользовательских процессов должно быть> = то, что вы указываете для minfds.

Вот багтрекер для исправления: https://github.com/Supervisor/supervisor/issues/562

Оно должно быть исправлено в следующей версии.