Развертывание скриптов Python на производственном уровне, сбои могут начаться автоматически!

Node.js Python Android PM2

Сегодня я представляю инструмент управления процессами производственного уровня PM2.Обычно, когда мы говорим о PM2, мы говорим о том, как развертывать программы Node.js, но на самом деле PM2 очень мощный, его можно использовать не только для управления Node.js, он также может использоваться для управления Python, PHP, Ruby, Perl и т. д.

Здесь мы берем Python в качестве примера, чтобы увидеть, как PM2 развертывается и управляет сценариями Python.

PM2-Python

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

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

Сегодня PM2 разрабатывается уже 5 лет, имеет более 6500 загрузок на Github и стал одним из предпочтительных способов запуска Node.js на рабочих серверах. Но он также поддерживает Python.

Установить PM2

PM2 зависит от node.js, поэтому вам нужно заранее установить Node, этот шаг очень прост:

curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt-get install -y nodejs

Как на других платформах установить Node.js, найдите туториалы самостоятельно.

Если у вас есть среда Node, вы можете установить PM2 через npm.

$ sudo npm install pm2 -g

Чтобы инициализировать PM2, вы можете использоватьpm2 lsкоманда, вы можете увидеть очень дружественный интерфейс на данный момент.

Теперь, когда PM2 успешно установлен, давайте запустим приложение Python.

Запустить Python

Запустить приложение с помощью PM2 очень просто, он автоматически подбирает интерпретатор на основе расширения скрипта для запуска указанного приложения.

Давайте создадим простые приложения Python, такие как: hello.py.

#!/usr/bin/python
import time

while 1:
    print("Start: %s" % time.ctime())
    time.sleep(1)

У нас есть простой скрипт Python, затем мы используем PM2 для его запуска.

$ pm2 start hello.py

Затем вы можете увидеть процесс в Терминале.

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

Режим тут форк, то есть закрыть текущее окно Терминала, еще может проверить статус приложения.

Чтобы просмотреть приложения, которые запускаются и управляются PM2, вы можете использоватьpm2 lsкоманда для просмотра.

Проверьте журналы

Программы запускаются через PM2, если хотите просмотреть лог, то можете войтиpm2 logsЗаказ.

Если вы хотите указать для просмотра журнала процесса, вы можете использоватьpm2 logs <app_name>указать.

Кроме того, PM2 также обеспечивает функцию автоматической ротации журналов, но ее необходимо установить.pm2-logrotate

$ pm2 install pm2-logrotate

pm2-logrotateЭто обеспечит функцию обновления ежедневной ротации журнала и сохранит общий размер управления журналом на уровне 10M.

Просмотреть информацию о процессе

Чтобы просмотреть сведения о программах, запущенных в данный момент с помощью PM2, используйтеpm describe <app_name>команда для просмотра.

В выводе вы можете увидеть путь к файлу журнала, интерпретатору и т. д.

Управление состоянием процесса PM2

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

1. остановить программу

$ pm2 stop hello

2. Перезапустить программу

$ pm2 restart hello

3. Остановить и удалить программу из списка процессов

$ pm2 delete hello

Для получения дополнительных команд вы можете напрямую просмотреть официальную документацию.

Продолжайте работать после перезагрузки сервера

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

Чтобы запустить PM2 вместе с системой, просто запустите эту команду.

$ pm2 startup

startupВы можете сгенерировать команду, которая устанавливает переменные среды.

截图 - ä"Ž -  2018-09-19-13-05-39
截图 - ä"Ž - 2018-09-19-13-05-39

Скопируйте/вставьте последнюю строку этой команды и автоматически выполните PM2 при перезагрузке системы.

Теперь, когда вы можете перезапустить PM2, вам нужно сообщить PM2, какие состояния процессов должны оставаться неизменными при перезапусках, просто введите команду:

$ pm2 save

Это создаст файл дампа, в котором записано состояние процессов, которыми в настоящее время управляет PM2, и PM2 восстановит их в прежнем состоянии после перезапуска.

Мониторинг информации о ЦП/памяти

Чтобы прослушать ЦП/память и проверить некоторую информацию о процессе, вам нужно использоватьpm2 monitЗаказ.

Это откроет интерфейс термина, который позволяет вам попытаться получить запускное приложение.

вы также можете использоватьpm2 show <app_name>Получить всю возможную информацию о приложении.

Работа с файлами экосистемы

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

Eocsystem необходимо настроить с помощью файла экосистемы.config.js, который можно настроить с помощьюpm2 initгенерация команд. После генерации мы можем настроить в нем некоторую конфигурационную информацию.

module.exports = {
  apps : [{
    name: 'echo-python',
    cmd: 'hello.py',
    args: 'arg1 arg2',
    autorestart: false,
    watch: true,
    pid: '/path/to/pid/file.pid',
    instances: 4,
    max_memory_restart: '1G',
    env: {
      ENV: 'development'
    },
    env_production : {
      ENV: 'production'
    }
  }, {
    name: 'echo-python-3',
    cmd: 'hello.py',
    interpreter: 'python3'
  }]
};

В этом примере мы объявляем два приложения с помощьюinterpreterНастройте интерпретаторы, запускаемые программой, один для работы с Python2 (по умолчанию), а другой для работы с Python3.

запустите его, все еще используйтеpm2 startЗаказ.

$ pm2 start ecosystem.config.js

Чтобы перезапустить только «производство» (env_production):

$ pm2 restart ecosystem.config.js --env production

Ecosystem.config.jsВ файле многие конфигурации могут быть заданы командами, например, командой--interpreterуказать парсер.

Обычно мы устанавливаем среду Python2.x и Python3.x одновременно, а PM2 оценивается по суффиксу файла скрипта по умолчанию, если суффикса нет, его нужно указать--interpreter.

{
  ".sh": "bash",
  ".py": "python",
  ".rb": "ruby",
  ".coffee" : "coffee",
  ".php": "php",
  ".pl" : "perl",
  ".js" : "node"
}

Информация о конфигурации также помечает сценарии, поддерживаемые PM2.

Затем, если вам нужно использовать Python3.x для выполнения сценария, вам нужно--interpreter.

$ pm2 start hello.py --interpreter=python3

резюме

Простое использование PM2 вводится здесь первым. Хотя Python используется в качестве примера здесь, все связанные команды в этой статье могут быть применены к другим скриптам, поддерживаемыми PM2.

PM2 также имеет много мощных функций, таких как простое развертывание на сервер, используя SSH, балансировка нагрузки и т. Д. - это несколько хороших функций, если вы заинтересованы, вы можете проверить документацию. Документация PM2 является надежным, и ответы на большинство вопросов можно найти в документации.

Если у вас есть какие-либо вопросы, добро пожаловать на обсуждение в области сообщений, поделитесь им, если это будет полезно, спасибо!

Ссылаться на:

https://blog.pm2.io/managing-python-application-with-pm2

https://pm2.io/doc/en/runtime/quick-start/

Закулисье паблик-аккаунта реагирует на рост»взросление», получит подготовленные мной учебные материалы, а также сможет ответить «Добавить группу», учитесь и совершенствуйтесь вместе; вы также можете ответить «задавать вопросы', - задали мне вопрос.

Рекомендуемое чтение:

Графический Chrome, Архитектура | Используйте сценарии предварительной обработки для управления кодом апплета| Сегментация слов, популярная наука и решения| Иллюстрация: запрос диапазона HTTP | Учебные материалы для небольших программ |Кодировка HTTP-контента | Боевой режим помощи | Вспомогательный режим для трюков | Гибкий макет апплета