Supervisor на FreeBSD 10.3

3 хв. читання

Не так давно мені довелось розв'язувати задачу «демонізації» пайтонівського скрипта (зі стартом його після старту самої ОС). Для Ubuntu вдалось усе зробити вручну (fork python процесу від батьківського і копіювання потрібного файлу до /etc/init.d/ та ще кілька дрібниць). А от для FreeBSD треба було робити інакше. І хоч ця ОС має аналогічну систему сервісів /etc/rc.d + /usr/local/etc/rc.d, повторити штуку, як на Ubuntu, мені не вдалось. Тому я вирішив зробити це за допомогою добре відомого, громіздкого, але універсального інструмента – supervisor. Тут я розкажу найпростіший випадок налаштування supervisor. Можливо в іншій статті опишу варіант зі складнішими налаштуваннями.

Встановлення

Як ставити supervisor? Це просто, якщо вірити посібнику на сайті інструменту:

easy_install supervisor

або

pip install supervisor

Проблема у тому, що у нас (принаймні початково після установки FreeBSD) ні easy_install, ні pip, ані python немає. Треба встановлювати.

У командному рядку FreeBSD переходимо у режим root:

login root

або

su –

Вводимо пароль адміністратора. Далі пишемо:

pkg install python

Система повідомить нас, що у нас і pkg немає, але запропонує його поставити. Погоджуємося. Усе разом з python-ом 2.7.ХХ має успішно встановитись.

Тепер треба поставити окремо pip (хоча ми мали отримати його разом з python). Пишемо у командному рядку:

python –m ensurepip

Ще є варіант (якщо з якихось причин попередні у вас не запрацювали) завантажити файл get-pip.py, але робити це треба curl, який знає, що таке SSL:

curl –O https://bootstrap.pypa.io/get-pip.py

Прапорець –O означає «завантажити файл з початковим іменем у поточну директорію». Якщо curl немає, ставимо його:

pkg install curl

Потім треба виконати завантажений скрипт:

python get-pip.py

Виконуємо команду:

pip install supervisor

Створюємо файл налаштувань (потрібні права адміністратора):

echo_supervisord_conf > /etc/supervisord.conf

Тепер нам потрібен скрипт, який налаштує нам supervisor, тобто скрипт ініціалізації. Можливо у вас ще немає директорії /usr/local/etc/rc.d. У такому разі створіть теку rc.d

mkdir /usr/local/etc/rc.d

Тепер створіть файл /usr/local/etc/rc.d/supervisord і запишіть у нього:

#!/bin/sh

# PROVIDE: supervisord
# REQUIRE: DAEMON
# KEYWORD: shutdown

. /etc/rc.subr

name=supervisord
rcvar=supervisord_enable

load_rc_config $name

command="/usr/local/bin/${name}"
command_interpreter="/usr/local/bin/python"

run_rc_command "$1"

Також зробіть його виконуваним:

chmod +x /usr/local/etc/rc.d/supervisord

Маючи скрипт у вказаній теці, ми отримуємо можливість автоматичного завантаження supervisor відразу після завантаження ОС. Додайте у файл /etc/rc.conf таке:

supervisord_enable="YES"

Розгортаємо у текстовому редакторі (якщо не знаєте vi, використайте ee) згенерований нами файл /etc/supervisord.conf та змінимо частину [program:x].

Для прикладу, отакий вигляд матиме розділ з програмою <project>_uwsgi, у якому будуть вказівки для вашого uWSGI:

[program:<project>_uwsgi]
; Шлях до проекту (chdir)
directory=/<project>
; Команда для запуску програми
command=/<project>/venv/bin/uwsgi /<project>/uwsgi/production.ini
; При завантаженні самого supervisor запускати програму
autostart=true
; Якщо програма аварійно завершилась, то перезапускати її
autorestart=true
; Перенаправлення отриманого STDERR у відповідь supervisor в STDOUT (еквівалент /the/program 2>&1)
redirect_stderr=true
; Тайм-аут в секундах, після якого supervisor надішле SIGKILL процесу,
; якому до цього посилав SIGCHLD
stopwaitsecs=60
; Який сигнал посилати для зупинки програми
stopsignal=INT
; Шлях до error-лоґу
stderr_logfile=/<project>/log/<project>/wsgi_err.log
; Шлях до output-лоґу
stdout_logfile=/<project>/log/<project>/wsgi_out.log

Використання

Для запуску supervisor (якщо перезавантажите ОС, то він вже працюватиме) скомандуйте:

/usr/local/etc/rc.d/supervisord start

Тепер виконайте у консолі команду:

supervisorctl

Ви побачите таке:

supervisor> status
<project>_uwsgi                   RUNNING    pid 54020, uptime 0:01:11

де <project>_uwsgi – ім'я вашої програми, а running – чинний стан вашої програми. Можна залучити supervisorctl ще так:

supervisorctl status <project>_uwsgi
supervisorctl restart <project>_uwsgi

На цьому я закінчу. Статті належалось розказати про встановлення supervisor, що і було зроблено. Використання його з користувацькими програмами – вже окрема тема.

Сподіваюсь, стаття була вам корисна. Щасти!

Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Codeguida 6.2K
Приєднався: 7 місяців тому
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація