Python скрипт как сервис linux

Обновлено: 07.07.2024

В нашей инструкции будет рассмотрена настройка веб-сервера для поддержки приложений, разработанных на языке Python. Руководство рассчитано для операционных систем семейства Deb (Ubuntu, Debian, Mint).

Запуск uWSGI приложения

Устанавливаем python и дополнительные компоненты:

apt-get install python3 python3-dev python3-pip

  • python3 — сам python третьей версии.
  • python3-dev — стандартный набор библиотек. Нужен для установки и сборки дополнительных модулей.
  • python3-pip — система управления пакетами для python.

Устанавливаем дополнительные пакеты для python:

pip3 install virtualenv uwsgi

  • virtualenv — утилита для создания изолированного python-окружения.
  • uwsgi — веб-сервер для интерпретации кода, в нашем случае, python.

uWSGI установлен — посмотрим версию приложения:

Создаем каталог, в котором разместим наше тестовое приложение:

mkdir -p /var/www/python_app

. и перейдем в созданный каталог:

Создадим файл со следующим содержимым:

* в данном примере мы просто выводим на экран знаменитую фразу "Hello World".

Если в нашей системе используется брандмауэр с запрещающими правилами, открываем порт 8080:

iptables -I INPUT -p tcp --dport 8080 -j ACCEPT

apt-get install iptables-persistent

Создаем виртуальное окружение:

Активируем созданное окружение командой:

Запускаем веб-сервер на порту 8080:

Веб-сервер работает. Остановим его работу комбинацией клавиш Ctrl + С и деактивируем виртуальную среду:

Переходим к настройке uWSGI в качестве демона.

Сервис uWSGI

Чтобы не запускать сервис для каждого приложения вручную, необходимо настроить веб-сервер uWSGI. Он будет контролировать процесс работы с каждым приложением и позволит задать индивидуальные параметры с помощью конфигурационных файлов.

Устанавливаем веб-сервер командой:

apt-get install uwsgi uwsgi-plugin-python3

Создаем конфигурационный файл следующего содержания:

Разрешаем и стартуем сервис:

systemctl enable uwsgi

systemctl restart uwsgi

uWSGI + NGINX

Изменение настроек uWSGI

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

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

Добавим к нашей настройке:

[uwsgi]
.
socket = wsgi.sock
chmod-socket = 660
vacuum = true
uid = www-data
gui = www-data

  • socket — путь до сокетного файла, через который будут взаимодействовать наши uWSGI и NGINX.
  • chmod-socket — выставляем права на сокетный файл.
  • vacuum — удалять или нет при старте сервиса ранее созданные сокетные файлы.
  • uid — назначает владельца сокетного файла.
  • gui — назначает группу владельца сокетного файла.

Меняем владельца каталога нашего проекта на пользователя, под которым работает NGINX (в Ubuntu это, как правило, www-data):

chown -R www-data:www-data /var/www/python_app

systemctl restart uwsgi

Установка и настройка NGINX

Переходим к настройке NGINX. Для начала, установим его:

apt-get install nginx

systemctl enable nginx

Откроем на редактирование конфигурационный файл default:

* это самый простой путь для тестирования нашей настройки. Для продуктивной среды хорошим тоном будет настройка виртуальных доменов.

Python - очень популярный язык программирования для написания различных системных скриптов в Linux. В Windows, там где не хватает возможностей командной оболочки используется PowerShell. В Linux же, когда возможностей Bash не хватает используется язык Python.

На этом языке написано огромное количество системных программ, среди них пакетный менеджер apt, видеоредактор OpenShot, а также множество скриптов, которые вы можете установить с помощью утилиты pip. В этой небольшой статье мы рассмотрим как запустить Python скрипт в Linux с помощью терминала различными способами.

Запуск python скрипта в Linux

Для примера нам понадобится Python скрипт. Чтобы не брать какой-либо из существующих скриптов, давайте напишем свой:

print("Hello from losst!")


Для того чтобы запустить скрипт необходимо передать его интерпретатору Python. Для этого просто откройте терминал с помощью сочетания клавиш Ctrl + Alt + T, перейдите в папку со скриптом и выполните:


Если вы хотите, чтобы после выполнения скрипта открылась консоль, в которой можно интерактивно выполнять команды языка Python используйте опцию -i:

python -i script.py


Но как вы могли заметить, при запуске apt или openshot не надо писать слово python. Это намного удобнее. Давайте разберемся как это реализовать. Если вы не хотите указывать интерпретатор в командной строке, его надо указать в самом скрипте. Для этого следует в начало скрипта добавить такую строчку:


Сохраните изменения, а затем сделайте файл скрипта исполняемым с помощью такой команды:

chmod ugo+x script.py

После этого можно запустить скрипт Python просто обращаясь к его файлу:


Если убрать расширение .py и переместить скрипт в каталог, находящийся в переменной PATH, например /usr/bin/, то его можно будет выполнять вот так:

Как видите, запуск команды python Linux выполняется довольно просто и для этого даже есть несколько способов. А каким способом пользуетесь вы? Напишите в комментариях!

Нет похожих записей


Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

Несколько способов запуска скриптов Python в фоновом режиме

Сценарий мониторинга test1.py, написанный на python, работает в режиме True. Когда ssh удален (с помощью терминала замазки), запустите сценарий с помощью следующей команды:


Теперь сценарий работает нормально, вы можете увидеть номер процесса через ps, в это время непосредственно закройте терминал ssh (не используя команду выхода, но непосредственно через кнопку закрытия putty), после входа в систему снова и найденный Процесс уже завершен.

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

бегать в фоновом режиме под окнами

Под окнами нет глубоких исследований. Метод, который я часто использую, заключается в изменении расширения скрипта Python ".pyw". Двойной щелчок запускается в фоновом режиме без изменения кода.

Запустите в фоновом режиме под Linux

Через вилку
В среде Linux процесс демона в c реализован с помощью fork, и python также может быть реализован таким образом. Пример кода следующий:

Через выскочку

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

1. Напишите скрипт на Python

2. Напишите файл конфигурации upstat

Скрипт bash

1. код Python

Если вы используете & для запуска процесса напрямую:

Непосредственное закрытие терминала ssh приведет к завершению процесса.

Через экран, tmux и т. Д.

Если вы временно запустите программу, вы можете запустить программу через screen, tmux, здесь описывается, как запускается tmux.

1. Запустите tmux

Введите tmux в терминал, чтобы начать

2. Запустите программу в tmux

Просто выполните следующую команду напрямую (ссылка на скрипт выше): python test123.py

3. Закройте терминал ssh напрямую (например, кнопку закрытия на замазке);

4. После перезапуска ssh выполните следующую команду:

  • Теперь вы можете видеть, что программа на python все еще работает нормально.

Интеллектуальная рекомендация

совместный запрос mysql с тремя таблицами (таблица сотрудников, таблица отделов, таблица зарплат)

1. Краткое изложение проблемы: (внизу есть инструкция по созданию таблицы, копирование можно непосредственно практиковать с помощью (mysql)) Найдите отделы, в которых есть хотя бы один сотрудник. Отоб.


[Загрузчик классов обучения JVM] Третий день пользовательского контента, связанного с загрузчиком классов


IP, сеанс и cookie

Запускаем Python-скрипт с помощью Cron на Linux

Вспомнив про ранее купленный VPS, куда я деплоил свой tf-idf кластеризатор. Было решено залить скрипт на сервер и настроить его запуск на 6 утра ежедневно.

Устанавливаем Python на сервер

Выполняем, указные команды на примере Ubuntu.

Проверяем успешность установки командой python3.

Создаем виртуальное окружение virtalenv

создание venv python linux

Запуск Python-скрипта с помощью Сron

Давай потестируем то, что у нас получилось на маленьком скрипте, который будет писать в файл дату и время его активации. Таким образом мы проверим как работает cron. Тестовый скрипт, который мы положим в корень папки проекта, у меня это / home / iakulshin / pipeline, заливаем через файловый менеджер filezilla и прочие, если вы хардкорный девопс-дата-инженер удачи вам с nano. Заливаем скрипт указанный ниже в нашу папку.

Давайте попробуем создать cron задание для тестового запуска. В целом нам будут нужны 2 команды:

Появлеятся файлик с крон задачами в редакторе nano. Наша задача установить задание, которое будет запускать наш скрипт каждую минуту.

Наконец, в файлике test.txt каждую минуту появляется текущая дата, учения завершены, теперь рассмотрим возможные проблемы и способы их устранения.

Как понять что Cron срабатывает?

Чтобы удостовериться, что cron-таск отрабатывает, нам необходимо добавить задачу и обратиться к логам сервера, для этого идем в консоль и пишем следующую команду:

как понять что cron сработала

В нем вы увидите следующие записи:

Это означает, что cron срабатывает и воспроизводит команду, которую вы указали после звездочек. Но что делать, если python-скрипт всё еще не работает?

Cron срабатывает но Python-скрипт не выполняется

Возьмите команду, которую собирались добавь в крон и запустите её, это поможет словить ошибки связанные с недоступностью библиотек. В моем случае Скрипт не видел импортируемый файл, это я вылечил добавлением папки в системный путь. Добавляем в скрипты следующий код:

Если скрипт запускается по прямой команде из консоли, но cron всё еще не выполняется, то ошибка 100% в том, что ваш скрипт запускается не из под virtualenv или вы запускаете скрипт из под python не подходящей версии, поэтому проверяем следующее:

  1. Мы перешли в папку со скриптом командой cd
  2. Мы обратились к интерпретатору python3 находящемуся в папке с виртуальным окружением нашего проекта.

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

Читайте также: