Supervisord — инструмент для контроля запущенных процессов в системе

Программирование Администрирование Supervisord — инструмент для контроля запущенных процессов в системе

Помечено: , ,

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 3 нед., 4 дн. назад.

  • Автор
    Сообщения
  • #5298
    @admin

    Для запуска программ с определенными параметрами и отслеживания их состояния. Запуск процессов supervisord производит от своего имени, как под процессы, поэтому контроль остается за визором. Supervisorctl предоставляет системный- и веб-интерфейсы для мониторинга и управления процессами. Вы можете предоставить пользователям доступ на определенные программы, а они в свою очередь смогут видеть состояние этих программ и совершать действия над ними (start, stop, restart). Также имеется XML-RPC интерфейс, которым вы можете пользоваться для написания своих расширений и приложений, которым нужен доступ к Supervisord.

    Установка

    sudo apt-get install supervisor

    Можно установить еще и так, самая свежая версия из питоновского установщика, но для этого нужно еще тянуть кучу пакетов для питона и компиляторов

    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

    Для запуска 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 sv.dev;
        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://sv.dev, и видим, что-то такое (если есть созданные задачи):

    Создание задач для 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="pro-prof.com",SOME_SERVER_PARAM="my_param"

    далее нам эти переменные доступны из $_SERVER[‘HTTP_HOST’] и $_SERVER[‘SOME_SERVER_PARAM’]

    В случае появления нового типа задач для гирмана нужно перезапускать по одному воркеру (так мы отловим возможные ошибки и не будем нарушать общую работоспособность системы)

Для ответа в этой теме необходимо авторизоваться.