Суббота , 21 Декабрь 2024

Supervisor: A Process Control System — Supervisor 4.0.0.dev0 documentation

Содержание

supervisor — управление процессами и сервисами

supervisor — система для управления сервисами, написана на Python, использует INI-конфиги для настроек.

Домашняя страница и документация — тут>>>, репозиторий — тут>>>.

Состоит из:

  • supervisord: сам север, обрабатывающий запросы от клиентов и считывающий файлы настроек для сервисов
  • supervisorctl: CLI для управдения процессами под контролем supervisord, подключаясь к нему через сокет или TCP порт
  • HTTP сервер: предоставляет веб-интерфейс для доступа к supervisord

Установка

В Debian/Ubuntu можно устанвить из репозитория:

sudo apt install supervisor

Но в репозиториях может быть устаревшая версия (3.2.0 на момент написания), более новую можно получить из PyPi:

sudo apt install python-pip

sudo pip install supervisor

Версия:

ubuntu@ip-172-31-37-96:~$ supervisord —version

3. 3.4

Файл настроек

Что бы создать файл настроек — используем echo_supervisord_conf.

Файл настроек, который supervisord использует по умолчанию — /etc/supervisord.conf, при желании можно указать другой, используя опцию -c.

Создаём файл:

sudo sh -c ‘echo_supervisord_conf > /etc/supervisord.conf’

Запуск 

Для тестов можно запускать supervisord напрямую, и передавая ему опцию -n, что бы оставался в foreground:

ubuntu@ip-172-31-37-96:~$ /usr/local/bin/supervisord -n

2018-05-04 14:23:55,083 INFO RPC interface ‘supervisor’ initialized

2018-05-04 14:23:55,084 CRIT Server ‘unix_http_server’ running without any HTTP authentication checking

2018-05-04 14:23:55,084 INFO supervisord started with pid 8875

Если выполнить его  без

-n — сервис запустится сразу в фоне, и будет писать данные в лог /var/log/supervisor/supervisord. log.

Для запуска вместе с системой, используя systemd — на Ubuntu 16.04 надо написать свой сервис-файл.

Создаём файл /etc/systemd/system/supervisord.service:

[Unit]
Description=Supervisor daemon
Documentation=http://supervisord.org
After=network.target

[Service]
ExecStart=/usr/local/bin/supervisord -n -c /etc/supervisor/supervisord.conf
ExecStop=/usr/local/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/local/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target
Alias=supervisord.service

Переносим дефолтный файл настроек:

sudo mkdir /etc/supervisor/

sudo mv /etc/supervisord.conf /etc/supervisor/

Запускаем:

sudo systemctl start supervisord.service

И проверяем:

ubuntu@ip-172-31-37-96:~$ ps aux | grep super

root      9069  0. 1  3.7  57596 18804 ?        Ss   14:36   0:00 /usr/bin/python /usr/local/bin/supervisord -n -c /etc/supervisord.conf

Добавление сервисов

Что бы добавить сервис, который будет обслуживаться supervisord — создадим файл в каталоге /etc/supervisor/conf.d/:

sudo mkdir /etc/supervisor/conf.d

Редактируем /etc/supervisor/supervisord.conf, обновляем [include] в самом конце файла:

...
[include]
files=conf.d/*.conf
files=conf.d/*.ini
;files = relative/directory/*.ini

Каждый сервис, который будет управляться

supervisord, добавляется через отдельный блок [program].

Для примера — создадим скрипт, который пишет в stdout и stderr:

#!/usr/bin/env bash

while true; do
        # out to stdout
        echo "stdout at $(date)"

        # out to stderr
        echo "stderr at $(date)" > &2

        sleep 1
done

Устанавливаем бит выполнения:

chmod +x /home/ubuntu/supr_expl. sh

Добавляем новый конфиг для supervisor — /etc/supervisor/conf.d/supr_expl.conf:

[program:supr_expl]
command=/home/ubuntu/supr_expl.sh
autostart=true
autorestart=true
stderr_logfile=/var/log/supr_expl.err.log
stdout_logfile=/var/log/supr_expl.out.log

Тут:

  • command: путь к исполняемому файлу программы
  • autostart: запускать программу при запуске самого supervisord
  • autorestart: перезапускать программу, если она «вылетела»
  • stderr_logfile: вывод stderr
  • stdout_logfile: вывод stdout

Теперь можно использвать supervisorctl для управления программой.

Перечитываем конфиги:

root@ip-172-31-37-96:~# supervisorctl reread

supr_expl: available

Добавляем его в supervisord:

root@ip-172-31-37-96:~# supervisorctl add supr_expl

supr_expl: added process group

Проверяем статус:

root@ip-172-31-37-96:~# supervisorctl status

supr_expl                        RUNNING   pid 13584, uptime 0:00:40

Останавливаем:

root@ip-172-31-37-96:~# supervisorctl stop supr_expl

supr_expl: stopped

Удаляем:

root@ip-172-31-37-96:~# supervisorctl remove supr_expl

supr_expl: removed process group

Проверяем логи:

root@ip-172-31-37-96:~# head -n 3 /var/log/supr_expl. *

==> /var/log/supr_expl.err.log <==

stderr at Mon May  7 08:49:29 UTC 2018

stderr at Mon May  7 08:49:30 UTC 2018

stderr at Mon May  7 08:49:31 UTC 2018

==> /var/log/supr_expl.out.log <==

stdout at Mon May  7 08:49:29 UTC 2018

stdout at Mon May  7 08:49:30 UTC 2018

stdout at Mon May  7 08:49:31 UTC 2018

И пример добавления NGINX, создаём файл:

[program:nginx]
command=/usr/sbin/nginx -g "daemon off;"
autostart=true 
autorestart=true
stdout_events_enabled=true
stderr_events_enabled=true

Перечитываем конфиги:

root@ip-172-31-37-96:~# supervisorctl reread

nginx: available

supr_expl: available

Устанавливаем сам nginx:

Запускаем его:

root@ip-172-31-37-96:~# supervisorctl add nginx

nginx: added process group

Проверяем:

root@ip-172-31-37-96:~# supervisorctl status nginx

nginx                            RUNNING   pid 14647, uptime 0:00:02

И curl-ом:

root@ip-172-31-37-96:~# curl localhost -I

HTTP/1. 1 200 OK

Server: nginx/1.10.3 (Ubuntu)

Date: Mon, 07 May 2018 08:58:22 GMT

См. документацию тут>>>.

Веб-интерфейс

Кроме supervisorctl — доступен веб-интерфейс через встроенный в supervisor веб-сервер.

Редактируем /etc/supervisor/supervisord.conf

, убираем комментарии:

...
[inet_http_server]         ; inet (TCP) server disabled by default
port=*:9001        ; ip_address:port specifier, *:port for all iface
;username=user              ; default is no username (open server)
;password=123               ; default is no password (open server)
...

Перезапускаем supervisord:

 systemctl restart supervisord.service

Проверяем:

Готово.


supervisord и непрерывная работа служб на сервере

supervisord — демон и служба, позволяющая обеспечивать непрерывную работу критичных сервисов. Это самый простой способ следить за процессами и перезапускать их при необходимости.

 

На любом сервере есть процессы которые должны выполняться постоянно. Например, для веб-сервера это может быть PHP-FPM или любой другой бэкенд (ниже рассмотрим Angular-CLI в development режиме).

Если происходит ситуация, вызванная кратковременными причинами, при которой процесс завершается посетитель сайта увидит серверную ошибку 502. Причиной может быть нехватка памяти и OOM.

 

И хотя после OOM сервер вновь работоспособен ошибка не исчезнет поскольку процесс завершился. Администратору придется запускать его вручную.

 

 

Чтобы этого избежать пишут скрипты для запуска сервисов для systemd или upstart. Или же используют runit. Службы перезапускать может система мониторинга monit.

Самый простой способ — supervisor (официальный сайт проекта).

 

Пакет устанавливается из репозитория при помощи apt-get install supervisor и очень прост в настройке. Работает так же эффективно как runit, но удобнее него при конфигурации. Достаточно создать файл с настройками и прописать в нем несколько директив.

 

 

Основной конфигурационный файл пакета обычно менять не требуется

less /etc/supervisor/supervisord.conf

В нем подключаются все файлы директории conf.d с расширением .conf

 

 

Поэтому если нужно добавить новый сервис создается такой файл

 

mcedit /etc/supervisor/conf.d/angular.conf

[program:ang]
command=ng serve
directory=/home/angular/
stdout_logfile=/var/log/ang.log
autostart=true
autorestart=true
startretries=6
user=root
stopsignal=KILL

 

Простейшая конфигурация представляет собой имя приложения, команду которой, оно запускается.

Каталог, в котором должна быть выполнена команда. Также логирование, сигнал по которому производится завершение работы и пользователь — владелец процесса.

 

Директивы autostart=true и autorestart=true обеспечат перезапуск в случае если сервер по какой-то причине перестал работать. Возможности очень широкие, можно настроить отправку уведомлений на почту (так же может Monit).

 

После добавления конфигурационного файла supervisor перезапускается. Дальнейшее управление возможно при помощи supervisorctl

 

supervisorctl

ang RUNNING pid 624, uptime 2 days, 2:26:29

 

Приглашение к вводу команды изменилось, из такого режима можно выполнять те же действия, но без указания supervisorctl . Например, посмотреть справку:

supervisor> help

 

 

Самые популярные команды при управлении supervisor

На иллюстрации представлен синтаксис любой команды по управлению службой при помощи supervisor

supervisorctl stop ang

Остановит один сервис

 

supervisorctl start all

Запустит все

 

supervisorctl restart all

Перезапустит все сервисы, о которых знает supervisor

 

supervisorctl reread

Перечитывает все конфигурационные файлы, сервисы не перезапускает

 

supervisorctl update

Используется в паре с предыдущей командой — перезапускает все сервисы, в конфигурационных файлах которых произошли изменения

 

 

В случае возникновения ошибок информацию о причинах следует искать в логах supervisor

less /var/log/supervisor/supervisord. log

 

Или каждого из сервисов (идентификатор генерируется заново при рестарте)

less /var/log/supervisor/ang-stderr—supervisor-Zkoh5I.log

 

 

Рассмотренное решение часто применяется для запуска приложений на Ruby, Python и NodeJS. На одном сервере может быть неограниченное количество управляемых сервисов, которым можно отдавать команды по одному или всем вместе.

Monit является другим способом автоматически перезапускать сервисы, которые по каким-то причинам перестали работать.

Supervisor. Поднимаем веб-интерфейс / Мастерская интернет-разработчика

14 февраля 2013 г. Nginx Python Мониторинг Supervisor FreeBSD

В предыдущей статье о Supervisor я рассказывал о том, как управлять запущенными через supervisorctl в консоли. Сегодня расскажу как запустить веб-интерфейс Supervisor и мониторить уже через веб, это может пригодится для тех пользователей, которым не стоит давать доступ по SSH, так как он просто им не нужен для работы, а смотреть процессы им надо.

Устанавливаем пропатченную версию

В свое время, я исправлял проблемы в веб-интерфейсной части Supervisor, но pull-request до сих пор не принят. Поэтому советую устанавливать из моего репозитория:

pip install -e git://github.com/adw0rd/supervisor.git#egg=supervisor

Настраиваем Supervisor

Открываем на редактирование файл /usr/local/etc/supervisord.conf и приводим секцию inet_http_server к виду:

[inet_http_server]
port=127.0.0.1:9001
username=<username>  ; Сам я не указываю username/password,
password=<password>  ; так как использую "auth_basic" для всего хоста в Nginx

Настраиваем Nginx

Если вы не хотите использовать сабдомен для Supervisor, то вот такой конфиг вам поможет:

server {
    listen 80;
    server_name example. /supervisor(.+)$ $1 break;
        proxy_pass http://localhost:9001;
        proxy_redirect http://example.orghttp://example.org/supervisor;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Иначе, с сабдоменом это будет так:

server {
    listen 80;
    server_name supervisor.example.org;
    location / {
        proxy_pass http://localhost:9001;
        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:

/usr/local/etc/rc.d/nginx reload
/usr/local/etc/rc.d/supervisord restart

Вот что должно в итоге у нас получиться, при входе в веб-интерфейс:

Вот и всё!

Укращение Демонов или инфраструктура для Gearman / Хабр

Gearman — фреймворк для распределения задач. Подробней о нем можно почитать: Здесь или Здесь. Этот инструмент — находка для решения целого ряда задач. Но при его эксплуатации на боевых серверах мы столкнулись с некоторыми проблемами, решением которых я хочу поделится:
— Как автоматически запускать демонов и следить за их здоровьем?
— Как запустить несколько инстансов воркеров?
— Куда демоны будут писать сообщения, предназначенные для вывода на экран?
— А как следить, чтобы демоны не отвлекались на грудастых гаргулий, а работали. словом следить за нагрузкой.
Для этого есть довольно удобные инструменты:


Предполагаем, что у нас имеется запущенный и настроенный Gearman-сервер, воркеры и клиенты, которые периодически что-то хотят от воркеров.

Supervisor


Проблема: Мы запустили Gearman сервер, теперь необходимо запустить n-ое количество различных воркеров.
— Запускать вручную и отвязывать от консоли?
— а как узнать что кто-то упал? и идет ли работа?
— ах, не отвязывать от консоли. Нет, попахивает мазохизмом.

Для решения этих проблем можно использовать Supervisor.

Как говорится в руководстве: Supervisor — клиент-серверная система, которая помогает пользователям мониторить и управлять количеством процессов в Unix-like операционной системе.
С его помощью мы можем демонизировать всех воркеров в нужном количестве, а так же отслеживать их работу
Необходимо для каждого воркера написать отдельный конфиг-файл и поместить его в /etc/supervisor/conf.d/
Конфиг-файл имеет довольно простую структуру:

[program:<worker_name>]
command=<execution_file>
process_name=%(process_num)s                          
stdout_logfile=/var/log/<worker_name>.log
stderr_logfile=/var/log/<worker_name>.log
redirect_stderr=true
autostart=true                                         
autorestart=true                                       
startsecs=5                                            
numprocs=1   

[program:<worker_name>] — заголовок секции. Нижеследующие параметры будут относится только к этому воркеру(демону)
command — команда на запуск файла. чаще всего путь к исполняемому файлу.
process_name — имя каждого инстанса воркера. Здесь есть тонкость — В мануале указано, что этот параметр не обязательный. Но у меня были проблемы с запуском нескольких инстансов воркера, если его не указывать. Дело в том, что имена процессов должны отличаться. Здесь помимо названия воркера указываем его порядковый номер.
stdout_logfile — говорит само за себя. куда перенаправляем стандартную консоль вывода.
stderr_logfile — то же самое, только для ошибок. Рекомендую указывать эти 2 параметра. Они могут очень выручить, когда придется разбераться почему падают ваши демоны.
autostart — как и следовало ожидать. запускаем воркеров при запуске супервизорда. Как правило при старте системы.
autorestart — уже за один этот параметр стоит использовать супервизор. Рестартует вашего воркера, если тот при выполнении одного из заданий упал с Exception’ом.
startsecs — сколько времени нужно ждать воркера, чтобы он запустился (не обязательный параметр)
numprocs — это второй параметр, за который можно любить супервизора — количество инстансов воркеров.

Контроль и управление демонами


Есть 2 возможности контролировать демоны, запущенные супервизором это консольная утилита supervisorCtl и веб интерфейс.
SupervisorCtl при запуске отображает информацию о статусе демонов:
Gearman_AddressCodeFinder:0      RUNNING    pid 2060, uptime 10:15:01
Gearman_MessageSender:0          RUNNING    pid 2064, uptime 10:15:01
Gearman_MessageSender:1          RUNNING    pid 2063, uptime 10:15:01
Gearman_ReportCreator:0          RUNNING    pid 2055, uptime 10:15:01
Gearman_WorkplanNotifier:0       RUNNING    pid 2061, uptime 10:15:01
Universal:0                      RUNNING    pid 2059, uptime 10:15:01
Universal:1                      RUNNING    pid 2058, uptime 10:15:01

Здесь все понятно и без объяснений. Можно понять кто работает, кто упал.
С помощью этой утилиты из консоли можно останавливать\запускать демонов, переконфигурировать супервизорд. Довольно интересна команда fg, позволяющая подключится к процессу в фоновом режиме (Он становится привязан к вашей консоли). Довольно удобная вещь для отладки на боевой системе 🙂

Управление демонами из веб-интерфейса

Помимо консольного интерфейса Супервизор имеет веб-интерфейс:

Попасть в него как правило можно по Url: 127.0.0.1:9211/ В вашем случае порт может отличаться. настройки можно найти в секции

[inet_http_server]
port = 127.0.0.1:9211

конфиг файла (в моем случае /etc/supervisor/supervisord.conf)

Из веб-интерфейса, так же как и из консоли, можно запускать\останавливать демонов, следить за тем, что они выводят на консоль. Последнее особенно ценно когда приходится отлавливать баги демонов на боевой системе

Gearman tools


Мониторинг демонов это хорошо. Но как узнать сколько задач на сервере очередей, а сколько и каких задач исполняются в данный момент. Есть как минимум 2 способа:
1) Подключение по telnet к серверу очередей и запрос состояния:
telnet localhost 4730
status //запрашиваем информацию о состоянии очередей
address:find    0       0       1
workplan:sendnotify     0       0       1
report:createreport     0       0       1
message:send    0       0       2
universal:universal     0       0       2

Но ифнормация довольно скудна. и вспомните ли вы через 2 месяца что за цифра в 3ей колонке? Я — точно нет.
2) Есть более красивое решение — утилита gearman_top
Она показывает ту же информацию, но в более удобном виде, и обновление данных происходит в реальном времени.
Устанавивается довольно просто:

apt-get install gearman-tools

Запускается командой:
gearman_top

Выводит информацию:
Queue Name           | Woker Available | Jobs Waiting | Jobs Running
----------------------------------------------------------------------
 address:find        |               1  |           0  |           0
 message:send        |               2  |           0  |           0
 report:createreport |               1  |           0  |           0
 universal:universal |               2  |           0  |           0
 workplan:sendnotify |               1  |           0  |           0
----------------------------------------------------------------------

Текст вывода на экран говорит сам за себя: Какие очереди присутствуют на сервере, сколько воркеров доступно в данный момент, сколько задач выполняется и сколько ждет выполнения.

Управляем процессами с Supervisor | Тегированный Вилан

Автор: spions on 13 ноября 2015

Supervisor — демон, который управляет процессами  в системе, позволяет отслеживать их состояние, в случаи непредвиденного выхода — перезапускать. Особая популярность применения как правило связана с внешними скриптами, которые необходимо запускать по определенным правилам и отслеживать их состояние. Например, с статье Gearman: распределяем задачи мы используем воркеты, их стоит поместить в окружение Supervisor.

Кроме демона система оснащена веб-интерфейсом и консольной утилитой supervisorctl: для мониторинга и управления процессами .

Установка supervisor.

Как правило пакет «supervisor» присутствует в системных репозитариях, однако стоит обратить внимание на версию. В связи с развитием проекта, на момент написания статьи, нас интересует 3 версия.  К сожалению CentOS ставит вторую версию пакета, по этому перед выполнением команд следуют убедиться, что пакет не установлен или если установлен и версия ниже 3-й — удалить.

Непосредственно установка:
#yum install python-setuptools
#easy_install supervisor
 
# supervisord --version
3.1.3

#yum install python-setuptools #easy_install supervisor # supervisord —version 3.1.3

Easy Install не создает нам конфигурационный файл и файл запуска демона:

Исправим это недоразумение.

echo_supervisord_conf > /etc/supervisord.conf

echo_supervisord_conf > /etc/supervisord.conf

В конфигурационном файле снимаем комментарий с «[include]»:
[include]
files = /etc/supervisord.d/*.conf
[include] files = /etc/supervisord.d/*.conf

Скрипт запуска помещаем в /etc/rc.d/init.d/supervisord:
#!/bin/bash
 
. /etc/init.d/functions
 
DAEMON=/usr/bin/supervisord
PIDFILE=/var/run/supervisord.pid
 
[ -x "$DAEMON" ] || exit 0
 
start() {
        echo -n "Starting supervisord: "
        if [ -f $PIDFILE ]; then
                PID=`cat $PIDFILE`
                echo supervisord already running: $PID
                exit 2;
        else
                daemon  $DAEMON --pidfile=$PIDFILE -c /etc/supervisord. conf
                RETVAL=$?
                echo
                [ $RETVAL -eq 0 ] &amp;&amp; touch /var/lock/subsys/supervisord
                return $RETVAL
        fi
 
}
 
stop() {
        echo -n "Shutting down supervisord: "
        echo
        killproc -p $PIDFILE supervisord
        echo
        rm -f /var/lock/subsys/supervisord
        return 0
}
 
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status supervisord
        ;;
    restart)
        stop
        start
        ;;
    *)
        echo "Usage:  {start|stop|status|restart}"
        exit 1
        ;;
esac
exit $?

#!/bin/bash . /etc/init.d/functions DAEMON=/usr/bin/supervisord PIDFILE=/var/run/supervisord.pid [ -x «$DAEMON» ] || exit 0 start() { echo -n «Starting supervisord: « if [ -f $PIDFILE ]; then PID=`cat $PIDFILE` echo supervisord already running: $PID exit 2; else daemon $DAEMON —pidfile=$PIDFILE -c /etc/supervisord. conf RETVAL=$? echo [ $RETVAL -eq 0 ] &amp;&amp; touch /var/lock/subsys/supervisord return $RETVAL fi } stop() { echo -n «Shutting down supervisord: « echo killproc -p $PIDFILE supervisord echo rm -f /var/lock/subsys/supervisord return 0 } case «$1» in start) start ;; stop) stop ;; status) status supervisord ;; restart) stop start ;; *) echo «Usage: {start|stop|status|restart}» exit 1 ;; esac exit $?

Не забываем выдать права на запуск:
chmod 755 /etc/rc.d/init.d/supervisord

chmod 755 /etc/rc.d/init.d/supervisord

Применение на практике:

В папке /etc/supervisor/conf. d создаем необходимое нам задание на запуск.

Одиночное:
[program:gearman_client]
command=/usr/bin/php gearman_client.php
directory=/mnt/vhosts/httpdocs/
autostart=true
autorestart=true
[program:gearman_client] command=/usr/bin/php gearman_client.php directory=/mnt/vhosts/httpdocs/ autostart=true autorestart=true

Или несколько потоков:

[program:yii-gearman-worker]
command=/usr/bin/php /yii/yii gearman/start %(process_num)s
directory=/mnt/vhosts/httpdocs/
process_name=gearman-worker-%(process_num)s
priority=1
numprocs=3
numprocs_start=1
autorestart=true
[program:yii-gearman-worker] command=/usr/bin/php /yii/yii gearman/start %(process_num)s directory=/mnt/vhosts/httpdocs/ process_name=gearman-worker-%(process_num)s priority=1 numprocs=3 numprocs_start=1 autorestart=true

Проверяем что все работает:
# ps -ax| grep php
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
11943 ? S 0:00 /usr/bin/php /mnt/vhosts/httpdocs/include/cron/gearman_client.php
12167 ? S 0:13 /usr/bin/php /home/vhosts/yii/yii gearman/start 1
12168 ? S 0:13 /usr/bin/php /home/vhosts/yii/yii gearman/start 3
12170 ? S 0:12 /usr/bin/php /home/vhosts/yii/yii gearman/start 2
16443 pts/3 S+ 0:00 grep php

# ps -ax| grep php Warning: bad syntax, perhaps a bogus ‘-‘? See /usr/share/doc/procps-3.2.8/FAQ 11943 ? S 0:00 /usr/bin/php /mnt/vhosts/httpdocs/include/cron/gearman_client.php 12167 ? S 0:13 /usr/bin/php /home/vhosts/yii/yii gearman/start 1 12168 ? S 0:13 /usr/bin/php /home/vhosts/yii/yii gearman/start 3 12170 ? S 0:12 /usr/bin/php /home/vhosts/yii/yii gearman/start 2 16443 pts/3 S+ 0:00 grep php

Вы можете оставить комментарий ниже.

Supervisor или как запускать скрипты в фоне

Supervisor или как запускать скрипты в фоне

Часто бывает потребность в запуске определенных скриптов в фоновом режиме. Многие просто ставят «&» и радуются, но скрипты имеют свойство падать в самый неподходящий момент и хотелось бы сразу их заново запускать и читать логи. На помощь приходит supervisor.

Supervisor — менеджер долгосрочных процессов, который выступает в качестве прослойки для мониторинга и управления Вашими процессами.

Установка

apt-get install supervisor

После установки supervisor должен запуститься сам, но для пущей надежности лучше его рестартануть:

service supervisor restart

Установка завершена…

Настройка

Запуск каждого процесса(скрипта) осуществляется при помощи создания конфигурационного файла с расширением .conf в папке 

/etc/supervisor/conf.d

Переходим в папку:

cd /etc/supervisor/conf.d

Создаем файл запуска процесса «test»:

nano test.conf

В файле пишем:

[program:test]
command=/home/test.py
autostart=true
autorestart=true
stderr_logfile=/var/log/test.err.log
stdout_logfile=/var/log/test.out.log

А теперь все разберем:

[program:test] — задает названия процесса в supervisor, в данном случае «test»

command=/home/test.py — полный путь к запускаемому скрипту
autostart=true — запускать ли процесс при старте системы, доступные варианты: true, false
autorestart=true — запускать ли процесс при его остановке, доступные варианты: true, false, unexpected (запускать в том случае, если процесс был завершен неправильно)
stderr_logfile=/var/log/test.err.log — файл с выводом лога ошибки
stdout_logfile=/var/log/test.out.log — файл с выводом лога процесса при работе

Данные параметры минимальные для запуска скрипта, полный список параметров находится здесь.

Настройка закончена, нужно, что б supervisor считал обновленные настройки:

supervisorctl reread

После того, как настройки считаны — нужно дать комманду запуска все сконфигурированых процессов, для этого вводим:

supervisorctl update

Всё, все процессы запущены и работают проверить статус Ваших процессов можете с помощью cli:

supervisorctl

Как только выполняете эту команду — видите текущие процессы и их статусы. Можете ввести help, что б получить помощь по командам.

Основные команды: start, stop, restart

Что б перезапустить процесс вводите:

restart test

Где рестарт — комманда, а test — название процесса

Что б выйти из cli, вводим:

quit

Надеюсь, что это кому-то поможет

Кто наблюдает за супервайзерами? | Выучите Erlang на благо!

Привет, похоже, ваш Javascript отключен. Ничего страшного, сайт без него работает. Однако вы можете предпочесть читать его с подсветкой синтаксиса, для чего требуется Javascript!

Кто наблюдает за супервайзерами?

От плохого к хорошему

Супервизоры — одна из самых полезных частей OTP, которые вы можете использовать. Мы уже видели базовых супервизоров в статьях «Ошибки и процессы» и «Проектирование параллельного приложения».Мы видели в них способ сохранить работу нашего программного обеспечения в случае ошибок, просто перезапустив неисправные процессы.

Чтобы быть более подробным, наши супервизоры запускали процесс worker , связывались с ним и перехватывали сигналы выхода с помощью process_flag (trap_exit, true) , чтобы узнать, когда процесс завершился, и перезапускали его. Это нормально, когда нам нужен перезапуск, но это также довольно глупо. Представим, что вы используете пульт дистанционного управления для включения телевизора. Если это не сработает с первого раза, вы можете попробовать один или два раза на случай, если вы нажали неправильно или сигнал пошел не так.Наш руководитель, если бы он пытался включить тот самый телевизор, продолжал бы пытаться бесконечно, даже если бы выяснилось, что в пульте нет батареек или он даже не подходит к телевизору. Довольно тупой начальник.

Еще кое-что, что было глупо в отношении наших руководителей, это то, что они могли наблюдать только за одним работником за раз. Не поймите меня неправильно, иногда полезно иметь одного супервизора для одного работника, но в больших приложениях это означает, что у вас может быть только цепочка супервизоров, а не дерево. Как бы вы руководили задачей, когда вам нужно сразу 2 или 3 сотрудника? С нашей реализацией это просто невозможно.

К счастью, диспетчеры OTP обеспечивают гибкость для обработки таких (и многих других) случаев. Они позволяют вам определить, сколько раз рабочий должен быть перезапущен за определенный период времени, прежде чем отказаться от него. Они позволяют иметь более одного работника на одного супервизора и даже позволяют выбирать между несколькими шаблонами, чтобы определить, как они должны зависеть друг от друга в случае сбоя.

Концепции супервизора

Супервизоры — одно из самых простых способов поведения для использования и понимания, но одно из самых сложных для написания хорошего дизайна.Существуют различные стратегии, связанные с супервизорами и дизайном приложений, но прежде чем перейти к ним, нам нужно понять более базовые концепции, потому что в противном случае это будет довольно сложно.

Одно из слов, которые я использовал в тексте до сих пор с

Определение супервизора от Merriam-Webster

su · per · vi · sor | \ ˈSü-pər-ˌvī-zər \ : тот, который контролирует, в частности, : административного сотрудника, отвечающего за бизнес, правительство или школьное подразделение или деятельность

Другие слова от руководителя

надзорного \ ˌsü- pər- ˈVī- zə- rē, — ˈvīz- rē \ прилагательное

Примеры супервизора в предложении

Наблюдатель уволил его после того, как он появился на работе в нетрезвом виде.Если у вас возникла проблема, обратитесь к своему супервизору .

Последние примеры в сети Наблюдатель , Идрис-Фарид Кларк, был приговорен к 18 месяцам тюремного заключения за нападение, а также за последующие угрозы коллегам-офицерам дать показания от его имени. — Адам Ферриз, , кливленд, , «Округ Кайахога сталкивается с 27 судебными исками в связи с нарушением дисциплины в тюрьме в связи с чередой смертей заключенных, на данный момент выплачено 1,35 миллиона долларов», 22 декабря.2020 Среди тех, кто получил первые вакцины в районе Портленда, были медсестра отделения интенсивной терапии, начальник домашнего хозяйства , респираторный терапевт, видеооператор и медсестра отделения неотложной помощи. — Из Usa Today Network And Wire Reports, USA TODAY , «Дома престарелых, заразные статьи, стимулирование игрушечного драйва: новости из примерно 50 наших штатов», 18 декабря 2020 г. Среди прочего, внутренние сообщения показали, что непосредственный руководитель Фрэнка и Гарвина , Capt.- Кевин Ректор, Los Angeles Times , «Выплата 700 000 долларов после обнаружения того, что осведомитель полиции Лос-Анджелеса был ошибочно уволен, как показывают записи» 15 декабря 2020 г.Недавно днем ​​к нему присоединился только еще один студент-сотрудник и их руководитель , которые в этом году наблюдает за семью студентами вместо ее обычных 16-18. — Ник Ролл, The Christian Science Monitor , «Когда ваши студенты — ваша рабочая сила, что происходит во время пандемии?», 9 декабря.Департамент услуг по уборке и хранению 2020 DeSoto ISD назвал Джеклин Диллон, начальник утренней опеки средней школы DeSoto , ее сотрудница 2020 года за ее работу по обеспечению безопасности учеников. — Тайлер Картер, Dallas News , «Во время пандемии этот надзиратель-надзиратель для средней школы ДеСото помогает обеспечивать безопасность учащихся», 8 декабря 2020 г. Скотт и Диксон позже собрались вместе и наняли супервайзера по футбольному судейству Дэвида Коулман.- Джон Канзано, oregonlive , «Канцано: Pac-12 тонет в море управленческих осечек», 5 декабря 2020 г. Данфорд был нанят в качестве справочного библиотекаря и занимал несколько должностей, в том числе помощника начальника отдела, супервизора служб для взрослых и библиотеки менеджер по бул. Напер. — chicagotribune.com , «Люди Нэпервилля в новостях», 28 ноября 2020 г. В состав группы входили Джек Хайн, руководитель парка и сотрудник Сара Люси (зеленая куртка), а также участница «Друзей» Лора Борг (на фото) , Линн Уилкинсон (в синем) и Дороти Миллен (клетчатая рубашка).- courant.com , «Новости сообщества The Colchester Edition», 25 ноября 2020 г.

Эти примеры предложений автоматически выбираются из различных источников новостей в Интернете, чтобы отразить текущее использование слова «руководитель». Взгляды, выраженные в примерах, не отражают мнение компании Merriam-Webster или ее редакторов. Отправьте нам отзыв.

Подробнее

Первое известное использование супервизора

15 век в значении, определенном выше

История и этимология супервизора

Среднеанглийский язык, от средневековой латыни, от supervidēre

Узнать больше о супервизоре

Статистика для супервизора

Процитируйте эту запись

«Руководитель.” Merriam-Webster.com Dictionary , Merriam-Webster, https://www.merriam-webster.com/dictionary/supervisor. Доступ 12 января 2021 г.

MLA Chicago APA Merriam-Webster

Дополнительные определения для супервизора

su · per · vi · sor | \ ˈSü-pər-ˌvī-zər \

Kids Определение супервизора

1 : лицо, отвечающее за других

2 : сотрудник, отвечающий за подразделение или деятельность предприятия, правительство, или школа

su · per · vi · sor | \ ˈSü-pər-ˌvī-zər \

Юридическое определение контролера

: тот, который руководит или наблюдает за лицом, группой, отделом, организацией или операцией, в частности : всенародно избранный главный административный чиновник поселка или другое подразделение в некоторых штатах США.S.

Другие слова от супервайзера

supervisorial \ ˌsü- pər- vī- ˈzōr- ē- əl \ прилагательное

supervisor \ ˌsü- pər- vī- zə- rē \ прилагательное

Комментарии к supervisor

Что заставило вас искать supervisor ? Сообщите, пожалуйста, где вы это читали или слышали (включая цитату, если возможно).

Навыки и знания супервайзера по контролю качества (КК)

Важность Знание
Производство и обработка — Знание сырья, производственных процессов, контроля качества, затрат и других методов для максимального повышения эффективности производства и распределения товаров.
Механика — Знание машин и инструментов, включая их конструкцию, использование, ремонт и техническое обслуживание.
Администрирование и управление — Знание принципов бизнеса и управления, связанных со стратегическим планированием, распределением ресурсов, моделированием человеческих ресурсов, техникой лидерства, методами производства и координацией людей и ресурсов.
Персонал и человеческие ресурсы — Знание принципов и процедур найма, отбора, обучения, вознаграждения и льгот, трудовых отношений и переговоров, а также информационных систем персонала.
Техника и технологии — Знание о практическом применении инженерных наук и технологий. Это включает применение принципов, методов, процедур и оборудования для проектирования и производства различных товаров и услуг.
Компьютеры и электроника — Знание схемных плат, процессоров, микросхем, электронного оборудования, компьютерного оборудования и программного обеспечения, включая приложения и программирование.
Образование и обучение — Знание принципов и методов разработки учебных программ и тренингов, преподавания и обучения для отдельных лиц и групп, а также измерения результатов обучения.
Английский язык — знание структуры и содержания английского языка, включая значение и написание слов, правила композиции и грамматику.
Математика — знание арифметики, алгебры, геометрии, исчисления, статистики и их приложений.
Психология — знание человеческого поведения и работоспособности; индивидуальные различия в способностях, личности и интересах; обучение и мотивация; методы психологического исследования; и оценка и лечение поведенческих и аффективных расстройств.
Дизайн — Знание методов проектирования, инструментов и принципов, используемых при производстве точных технических планов, чертежей, чертежей и моделей.
Клиентское и персональное обслуживание — Знание принципов и процессов предоставления клиентских и персональных услуг. Это включает в себя оценку потребностей клиентов, соответствие стандартам качества услуг и оценку удовлетворенности клиентов.
Канцелярские услуги — Знание административных и канцелярских процедур и систем, таких как обработка текста, управление файлами и записями, стенография и транскрипция, разработка форм и других офисных процедур и терминологии.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *