Решили дополнительную проблему с 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 (после обнаружения его с помощью 'which python')
environment=PYTHONPATH=/usr/bin
Пытался поместить путь в одинарные кавычки, попытался добавить USER = root в среду, попытался добавить
directory=opt/inf_api/
попытался добавить
user=root
Все то же самое, статус выхода 0. Похоже, что ничего не добавлено ни в какие файлы журнала, кроме того, что я вижу из отладки supervisord.
Человек я в растерянности.
ОБНОВЛЕНИЕ 2: Так что в журналах stderr и std out для этого НИЧЕГО нет. Он просто терпит неудачу с (Статус выхода 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, не ожидается) в исходном скрипте.
Я добавил в журнал некоторые исключения и даже несколько строк для печати в файл в начале скрипта. Как будто он даже не добирается туда, терпит неудачу еще до запуска.
Оказывается, это проблема, связанная с тем, как Supervisord перехватывает сообщения об ошибках от python. Как в нем нет. Я запускаю его, чтобы запустить приложение торнадо, которое вызывает второй файл python, чтобы он мог порождать n экземпляров серверов торнадо. Если в этом втором приложении Python есть ошибки, то оно не отлавливает их и не сохраняет в файлы журналов. Я пробовал всевозможные методы, но в итоге мне пришлось ловить их сам с помощью try: except: и сохранять в свои собственные файлы журнала. В любом случае, вероятно, хорошая парактиссия, но поговорим о том, как это сделать.