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

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

Centos 6.5 supervisor python 2.6, установленный с операционной системой python 2.7, установленной в / usr / local / bin

настройки программы supervisord

[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. Кажется, что ни к каким файлам журналов ничего не добавляется, кроме того, что я вижу из отладки supervisord.

Человек я в растерянности.

ОБНОВЛЕНИЕ 2: Так что в журналах stderr и std out абсолютно НИЧЕГО для этого. Он просто не работает с (Exit Status 1; не ожидается) без ошибок в программе, которую я пытаюсь запустить, ничего...

2014-03-05 11:25:01,027 INFO spawned: 'inf_svr' with pid 15542
2014-03-05 11:25:01,315 INFO exited: inf_svr (exit status 1; not expected)
2014-03-05 11:25:01,315 INFO received SIGCLD indicating a child quit

Обновление 3: у меня есть простой скрипт на python, запущенный и управляемый супервизором с использованием /usr/local/bin/python 2.7, так что, по крайней мере, я знаю, что он может вызываться с использованием другой переданной версии python.

Тем не менее, я все еще получаю (состояние ошибки 1, не ожидается) в исходном сценарии.

Я добавил некоторые записи в журнале исключений, и даже просто некоторые строки печати в файл в начале сценария. Как будто он даже не делает это там, терпит неудачу прежде, чем это даже запускает.

1 ответ

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

Другие вопросы по тегам