Показать страницуИстория страницыСсылки сюдаCopy this pageExport to MarkdownODT преобразованиеНаверх Вы загрузили старую версию документа! Сохранив её, вы создадите новую текущую версию с этим содержимым. Медиафайлы{{tag>service unix linux python supervisor initd}} ====== Supervisor ====== * http://supervisord.org Служит для демонизации процессов/программ с определенными параметрами и отслеживания их состояния. Запуск процессов supervisord производит от своего имени, как под процессы, поэтому контроль остается за визором. Supervisorctl предоставляет системный- и веб-интерфейсы для мониторинга и управления процессами. Вы можете предоставить пользователям доступ на определенные программы, а они в свою очередь смогут видеть состояние этих программ и совершать действия над ними (start, stop, restart). Также имеется XML-RPC интерфейс, которым вы можете пользоваться для написания своих расширений и приложений, которым нужен доступ к Supervisord. Supervisor написан на [[python]]. ===== Установка ===== ==== apt-get ==== $ sudo apt-get install supervisor ==== pip ==== Можно установить еще и c помощью пакетного мененджера pip для [[python]], самая свежая версия из питоновского установщика, но для этого нужно еще тянуть кучу пакетов для питона и компиляторов sudo pip install --upgrade supervisor sudo ln -s /usr/local/bin/supervisord /usr/bin/supervisord sudo ln -s /usr/local/etc/supervisord.conf /etc/supervisord.conf ===== Настройка ===== nano /etc/supervisor/supervisor.conf или $ echo_supervisord_conf > /etc/supervisor/supervisor.conf [unix_http_server] file = /tmp/supervisor.sock [supervisord] logfile = ./logs/supervisord.log logfile_maxbytes = 50MB logfile_backups = 10 loglevel = info pidfile = /tmp/supervisord.pid nodaemon = false minfds = 1024 minprocs = 200 [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl = unix:///tmp/supervisor.sock [program:someprogram1] command = bash -c "ulimit -n 10000; exec /usr/bin/php ./bin/some-program-1.php" process_name = Some-Program numprocs = 1 autostart = true autorestart = true user = root stdout_logfile = ./logs/some-program-info.log stdout_logfile_maxbytes = 1MB stderr_logfile = ./logs/some-program-error.log stderr_logfile_maxbytes = 1MB ===== WEB GUI ===== Для запуска web интерфейса supervisorctl необходимо в файле /etc/supervisor/supervisord.conf проверить наличие секции: [inet_http_server] port=127.0.0.1:9771 ;username=user ;password=123 Для работы через nginx c web версией можно написать прокси сервер: server { listen 80; server_name supervisor.loc; location / { proxy_pass http://127.0.0.1:9771; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } после чего перезапускаем nginx с supervisor' ом: /etc/init.d/supervisor restart /etc/init.d/nginx restart Если при запуске supervisor возникла ошибка: Starting supervisor: Error: Another program is already listening on a port that one of our HTTP..., то для решения данной проблемы нужно убить socket supervisor.sock, где находится видно из конфига Пример: $sudo unlink /tmp/supervisor.sock Далее из браузера заходим на http://supervisor.loc ===== supervisorctl ===== Создание задач для supervisor:\\ Для создания задач, необходимо прописывать конфиги в /etc/supervisor/conf.d/ Структура файла конфигураций для worker'а supervisor'а: [program:] command= process_name=%(process_num)s stdout_logfile=/var/log/.log stderr_logfile=/var/log/.log redirect_stderr=true autostart=true autorestart=true startsecs=5 numprocs=1 * [program:] — заголовок секции. Нижеследующие параметры будут относится только к этому воркеру(демону) * command — команда на запуск файла. чаще всего путь к исполняемому файлу. * process_name — имя каждого инстанса воркера. Здесь есть тонкость — В мануале указано, что этот параметр не обязательный. Но у меня были проблемы с запуском нескольких инстансов воркера, если его не указывать. Дело в том, что имена процессов должны отличаться. Здесь помимо названия воркера указываем его порядковый номер. * stdout_logfile — говорит само за себя. куда перенаправляем стандартную консоль вывода. * stderr_logfile — то же самое, только для ошибок. Рекомендую указывать эти 2 параметра. Они могут очень выручить, когда придется разбераться почему падают ваши демоны. * autostart — как и следовало ожидать. запускаем воркеров при запуске супервизорда. Как правило при старте системы. * autorestart — Перазапуск воркера, если тот при выполнении одного из заданий упал с Exception'ом. * startsecs — сколько времени нужно ждать воркера, чтобы он запустился (не обязательный параметр) * numprocs — количество инстансов воркеров. ===== Наблюдения ===== Иногда при останове supervisor'а остается висеть на порту http сервера python - нужно найти кто висит sudo netstat -nap | grep 9771 И грохнуть по pid процесс: sudo kill 2342 Прописать параметры $_SERVER в конфиге supervisor можно через переменную environment: [program:php-test] command=php /path/file.php environment=HTTP_HOST="blog-tree.com",SOME_SERVER_PARAM="my_param" далее нам эти переменные будут доступны из $_SERVER['HTTP_HOST'] и $_SERVER['SOME_SERVER_PARAM'] СохранитьПросмотрРазличияОтменить Сводка изменений Примечание: редактируя эту страницу, вы соглашаетесь на использование своего вклада на условиях следующей лицензии: CC0 1.0 Universal