Python скрипт как сервис linux
В нашей инструкции будет рассмотрена настройка веб-сервера для поддержки приложений, разработанных на языке 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
Вспомнив про ранее купленный VPS, куда я деплоил свой tf-idf кластеризатор. Было решено залить скрипт на сервер и настроить его запуск на 6 утра ежедневно.
Устанавливаем Python на сервер
Выполняем, указные команды на примере Ubuntu.
Проверяем успешность установки командой python3.
Создаем виртуальное окружение virtalenv
Запуск Python-скрипта с помощью Сron
Давай потестируем то, что у нас получилось на маленьком скрипте, который будет писать в файл дату и время его активации. Таким образом мы проверим как работает cron. Тестовый скрипт, который мы положим в корень папки проекта, у меня это / home / iakulshin / pipeline, заливаем через файловый менеджер filezilla и прочие, если вы хардкорный девопс-дата-инженер удачи вам с nano. Заливаем скрипт указанный ниже в нашу папку.
Давайте попробуем создать cron задание для тестового запуска. В целом нам будут нужны 2 команды:
Появлеятся файлик с крон задачами в редакторе nano. Наша задача установить задание, которое будет запускать наш скрипт каждую минуту.
Наконец, в файлике test.txt каждую минуту появляется текущая дата, учения завершены, теперь рассмотрим возможные проблемы и способы их устранения.
Как понять что Cron срабатывает?
Чтобы удостовериться, что cron-таск отрабатывает, нам необходимо добавить задачу и обратиться к логам сервера, для этого идем в консоль и пишем следующую команду:
В нем вы увидите следующие записи:
Это означает, что cron срабатывает и воспроизводит команду, которую вы указали после звездочек. Но что делать, если python-скрипт всё еще не работает?
Cron срабатывает но Python-скрипт не выполняется
Возьмите команду, которую собирались добавь в крон и запустите её, это поможет словить ошибки связанные с недоступностью библиотек. В моем случае Скрипт не видел импортируемый файл, это я вылечил добавлением папки в системный путь. Добавляем в скрипты следующий код:
Если скрипт запускается по прямой команде из консоли, но cron всё еще не выполняется, то ошибка 100% в том, что ваш скрипт запускается не из под virtualenv или вы запускаете скрипт из под python не подходящей версии, поэтому проверяем следующее:
- Мы перешли в папку со скриптом командой cd
- Мы обратились к интерпретатору python3 находящемуся в папке с виртуальным окружением нашего проекта.
В целом данный гайд должен помочь вам разобраться с запуском Python скриптов с помощью Cron. Однако, я оставлю ссылки на полезные треды в stackoverflow, где представлены дополнительные способы решения этой проблемы.
Читайте также: