Supervisord (статус выхода 1; не ожидается) centos python

Столкнулся с дополнительной проблемой с Supervisord.

Centos 6.5 supervisor python 2.6 установлен с ОС python 2.7, установленной в /usr/local/bin

настройки супервизорной программы

[program:inf_svr]
process_name=inf_svr%(process_num)s
directory=/opt/inf_api/
environment=USER=root,PYTHONPATH=/usr/local/bin/
command=python2.7 /opt/inf_api/inf_server.py --port=%(process_num)s
startsecs=2
user=root
autostart=true
autorestart=true
numprocs=4
numprocs_start=8080
stderr_logfile = /var/log/supervisord/tornado-stderr.log
stdout_logfile = /var/log/supervisord/tornado-stdout.log

Я могу запустить inf_server.py с помощью:

python2.7 inf_server.py --port=8080

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

есть идеи?

ОБНОВЛЕНИЕ: я не могу заставить его даже запускать базовый скрипт Python без сбоев. Начал с того, что закомментировал старую программу, добавил новую и вставил:

command=python /opt/inf_api/test.py

где test.py просто пишет что-то на экран и в файл. Сбой со статусом выхода 0. Поэтому я начал добавлять обратно местоположение python (после обнаружения его с помощью «какого python»)

environment=PYTHONPATH=/usr/bin

Пробовал помещать путь в одинарные кавычки, пытался добавить USER=root в среду, пробовал добавлять

directory=opt/inf_api/

попытался добавить

user=root

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

Человек я в недоумении.


person Michael    schedule 05.03.2014    source источник


Ответы (1)


Оказывается, это проблема с тем, как Supervisord перехватывает сообщения об ошибках от python. Как в нем нет. Я запускаю его, чтобы запустить приложение торнадо, которое вызывает второй файл python, чтобы он мог создавать n экземпляров серверов торнадо. Если во втором приложении Python есть ошибки, оно не перехватывает их и не сохраняет в файлы журнала. Я перепробовал всевозможные методы, но в итоге мне пришлось самому поймать их с помощью try:except: и сохранить в свои файлы журналов. В любом случае, вероятно, это хорошая практика, но поговорим о том, как это сделать.

person Michael    schedule 05.03.2014