Сервис Flask на Ubuntu 20.04 LTS#
Сервис Flask, запущенный на Ubuntu 20.04 LTS, доступен по адресу http://194.67.112.136:5000/analize. Помимо порта 5000, используются и другие порты для поддержки многопоточного режима расчёта моделей.
- Основное Flask-приложение расположено по пути
/root/mpawns_flask/app.py. - Сохраненные нейронные сети находятся в подкаталогах
/root/mpawns_flask/New.
Старт сервиса#
Старт сервиса выполняется автоматически через командный файл /root/mpawns_flask/after_reboot.sh.
Пример содержимого этого файла:
echo booted $(date) >> /root/greetings.txt
cd mpawns_flask
source myenv/bin/activate
flask run --host=0.0.0.0
Назначение строк:
- запись времени перезагрузки в лог-файл;
- переход в каталог с Flask-приложением;
- активация виртуальной среды со всеми Python-зависимостями;
- запуск Flask с доступом снаружи сервера; по умолчанию используется порт
5000.
Автоматический запуск после перезагрузки#
Командный файл запускается после каждой перезагрузки, потому что в системном каталоге /etc/cron.d/ расположен cron-файл flask-restart:
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# rebooting every night at 03:59
59 3 * * * root reboot now
# after reboot/boot starting flask:
@reboot root /root/mpawns_flask/after_reboot.sh
В этом файле заданы две ключевые операции:
- ежедневная перезагрузка сервера в
03:59; - автоматический вызов
after_reboot.shпосле перезапуска системы.
Примечания#
При работе сервиса наблюдается определенная утечка памяти, полностью устранить которую затруднительно. Поэтому на практике рекомендуется регулярная полная перезагрузка сервера: минимум ежедневно, либо, если нагрузка позволяет, по более редкому расписанию.
Дополнительно сервис доработан так, чтобы при каждом вызове возвращался не только ответ нейросети и тайминги, но и текущее потребление памяти Flask-процессом. Это позволяет мониторить состояние сервиса снаружи, например через тестовую программу test_4_nick.php, которая обращается к нескольким работающим серверам и сравнивает ответы и время выполнения.