Создайте сервис systemd для Flask API (для дистрибутивов GNU / Linux)
Привет… в этом посте я хочу показать вам кое-что о трюке с производительностью на стороне сервера. Я расскажу о пакете systemd в системах Linux, который будет использоваться в процессе разработки приложений или на заказ.
systemd
по словам Леннарта Поеттеринга, в первую очередь, это программный пакет, входящий в состав операционных систем Linux.
Он создается процессом init и принимает 1 в качестве идентификатора процесса (pid). Сервисы systemd запускаются автоматически и могут управляться пользователями root. С помощью команды sytemctl
можно запускать и останавливать службы systemd, приложения, изменившие файлы конфигурации, можно перечитывать и перезапускать (перезагружать), можно получить статус процесса, можно управлять после перезагрузки системы (включить / выключить). Для получения дополнительной информации см. Страницу руководства.
man systemctl
Flask microframework
это очень простая в использовании программа для создания простых API. Чтобы добавить его в файл сценария, достаточно загрузить модуль flask и включить его на страницу, а также создать объект приложения для создания ваших маршрутов. Затем можно использовать приведенный ниже сценарий.
import flask
app = flask.Flask(__name__)
app.config["DEBUG"] = True
@app.route('/', methods=['GET'])
def function_one():
return "<div style=\" display: flex;justify-content: center;align-items: center;height: 100%;border: 3px solid green; \" ><p>Hello sir, It seems to work properly.Here is<span style=\"font-size:50px; color:white; background-color:red\"> / </span></p> </div>"
@app.route('/users', methods=['GET'])
def function_two():
return "<div style=\" display: flex;justify-content: center;align-items: center;height: 100%;border: 3px solid green; \" ><p>Hello sir, It seems to work properly.Here is<span style=\"font-size:50px; color:white; background-color:green\"> /users</span> </p> </div>"
@app.route('/products', methods=['GET'])
def function_three():
return "<div style=\" display: flex;justify-content: center;align-items: center;height: 100%;border: 3px solid green; \" ><p>Hello sir, It seems to work properly.Here is<span style=\"font-size:50px; color:white; background-color:blue\"> /products </span></p> </div>"
app.run()
По умолчанию он начинает работать с расширением localhost:5000 port
. Чтобы изменить порт или хост, вы можете указать новый хост и порт с помощью app.run(host='ip_addr',port='port' )
.
После сохранения сценария как app.py его можно преобразовать в службу systemd.
Когда приложение flask запускается с Python, оно запускается на «сервере разработки». Существуют различные варианты поднятия API в «производственной» среде. Вы можете узнать об этом на странице руководства Flask.
Ознакомьтесь с вариантами развертывания фляги
В зависимости от операционной системы sudo vi /lib/systemd/system/myFlaskApp.service
, или откроем в редакторе nano
. Этот путь может отличаться в зависимости от дистрибутива. Чтобы узнать, где находятся другие службы, например, для службы mariadb,
locate mariadb
Если нет вывода, используйте команду updatedb
и попробуйте еще раз. services также можно найти в разделе /usr/lib/systemd/system/…
или вы можете создать такой каталог в каталоге /usr
.
/lib/systemd/system/myFlaskApp.service
=>
[Unit]
Description=My flask API service
[Install]
WantedBy=multi-user.target
[Service]
Type=simple
User=your username
PermissionsStartOnly=true
ExecStart=/usr/bin/python3 /your/path/app.py
Restart=on-failure
TimeoutSec=600
Примечание: здесь мы устанавливаем Restart=on-failure
. Это указывает на то, что мы хотим, чтобы он перезапускался только тогда, когда код выхода не равен 0. Вместо этого мы также можем добавить строки Restart=always
и RestartSec=1
.
Вы можете добавить файл конфигурации с расширением sudo vi /etc/init/myFlaskApp.config
.
description "MyFlaskApp"
start on stopped rc RUNLEVEL=[2345]
respawn
exec python3 /your/path/app.py
Потом
sudo systemctl start myFlaskApp
Вы можете запустить службу с помощью этой команды. Убедитесь, что он находится в состоянии active(running)
с systemctl status
.
Этот метод может быть полезен для разработок, сделанных в облачной службе, но рекомендуется использовать указанные выше параметры deployment
с точки зрения как производительности, так и управляемости в производственной среде.
Эта служба работает в фоновом режиме без вмешательства пользователя. Требуется pid
, как видно с sytemctl status
. Если создается модульная структура API, а операция маршрута и другие операции изолированы друг от друга, этот метод может быть полезен в ситуациях, когда не требуется никаких изменений в этом файле. Таким образом, мы можем назвать это «лайфхаком». Использовать что-то в качестве значения этого слова для улучшения образа жизни помимо его цели...