Содержание
Памятка по фоновому запуску Python-скриптов в Linux
- Убедитесь, что скрипт не содержит бесконечных циклов ввода/вывода без обработки.
- Используйте
nohupдля простого запуска без привязки к терминалу. - Для длительных сессий применяйте
screenилиtmux. - Для production-среды настройте systemd-сервис с автозапуском.
- Перенаправляйте stdout и stderr в отдельные файлы для отладки.
- Проверяйте права на выполнение скрипта (
chmod +x). - Используйте виртуальное окружение (virtualenv/venv) для изоляции зависимостей.
- Для веб-приложений на Flask/Django применяйте Gunicorn с systemd.
- Мониторьте процессы через
htopилиps. - Настройте уведомления о падении скрипта через cron или systemd.
- Для микросервисов рассмотрите Docker с политикой перезапуска
always. - Тестируйте скрипт в фоне на тестовом сервере перед деплоем.
Как настроить виртуальное окружение virtualenv для Python
sudo apt install python3-pip # системно apt install python3.10-venv # для отдельного пользователя sudo pip3 install virtualenv python3 -m venv venv $ source venv/bin/activate (venv) darkfire@dieg:~/project$ cat aiogram==2.15 pandas==1.3.0 tabulate==0.8.9 pip install —upgrade pip $ pip install -r
Для решения конфликта версий был придуман механизм виртуальных окружений virtualenv (virtual environments). С его помощью можно создать виртуальную среду, в которую можно устанавливать пакеты независимо от основной среды или других виртуальных окружений. Для простоты можно считать, что venv создаёт внутри проекта каталог, в который добавляет нужную версию Python и устанавливает все используемые пакеты для приложения. В результате получается рабочее, изолированное и переносимое окружение.
Устанавливаем менеджер пакетов pip (если ещё не установлен). Чтобы иметь возможность устанавливать пакеты в Python, необходимо установить пакетный менеджер pip. Делается это с помощью следующей команды:
Устанавливаем пакет виртуального окружения virtualenv. С помощью только что установленного менеджера пакетов ставим пакет virtualenv:
Запуск бота в фоновом режиме (4 варианта)
import telebot from telebot import types bot = («token») @bot.message_handler(commands=[‘start’]) def url(message): markup = () btn1 = (text = «Hosting Consultant», url= «/») (btn1) bot.send_message(message.from_user.id, «Click the button to go to the site», reply_markup = markup) (none_stop=True, interval = 0) (venv) root@z:~/apppythonbot# cat pyTelegramBotAPI==4.16.1 useradd -m appuser su — appuser cd apppythonbot/ python3 -m venv venv appuser@z:~/apppythonbot$ source venv/bin/activate (venv) appuser@z:~/apppythonbot$ pip install -r
Напишем простой телеграм бот, который просто будет выводить кликабельную кнопку. Запускать бота будем от отдельного пользователя appuser.
Ниже по листингу думаю все понятно. Создаем пользователя appuser, создаем папку с ботом, устанавливаем Python зависимости нашего бота для пользователя appuser.
Вариант 1: Nohup
Для начала рассмотрим простые методы запуска скрипта в фоне, который не требует создания конфигурационных файлов. Однако если сервер будет перезагружен или во время работы скрипта возникнет ошибка, бот будет нужно запустить заново.
Вариант 2: screen
Для простого запуска скрипта в фоне можно воспользоваться утилитой screen, которая позволяет создавать неограниченное количество сессий в терминале. Расширенные настройки утилиты screen описаны в статье: Использование Screen оконного менеджера для терминала.
Запустите новое окно командой screen и вводите команду стандартную команду запуска скрипта.
Нажмите сочетание клавиш Ctrl + A + D — свернуть сессию. Screen будет отсоединен от экрана, вы вернетесь в физическую консоль. Сам screen при этом никуда не девается и висит в фоне, продолжая выполнять ваши задачи.
Вариант 3: Systemd
sudo nano /etc/systemd/system/ Description=New Application After= [Service] User=myuser Group=www-data WorkingDirectory=/home/myuser/new-application #Environment=VIRTUAL_ENV=/home/myuser/.virtualenvs/vlad #Environment=PYTHONPATH=/home/myuser/SM_8ject/SM-8 Environment=»PATH=/home/myuser/new-application/venv/bin» ExecStart=/home/myuser/new-application/venv/bin/python —start ExecStop=/home/myuser/new-application/venv/bin/python —stop ExecReload=/home/myuser/new-application/venv/bin/python —restart TimeoutSec=30 Restart=always sudo systemctl start new-application sudo systemctl stop new-application sudo systemctl start new-application sudo systemctl reload new-application sudo systemctl status new-application
Рассмотрим запуск приложения в роли службы. Systemd — это менеджер системы и служб Linux. Он управляет службами, которые описаны в конфигурационных файлах, и запускает их.
Вариант 4: менеджер процессов PM2
Этот вариант предлагает использовать менеджер процессов PM2, специализированный инструмент для управления процессами, но также подходящий для запуска и мониторинга других типов процессов.
Для запуска бота перейдите в директорию с ботом и запустите его командой:
Вариант 5: Gunicorn HTTP-сервер для Python
Как запустить сайт с помощью Gunicorn: Django, Flask. Рано или поздно вы приходите к тому, что надо запустить проект на сервере. Это руководство покажет как превратить любой Python-скрипт в сайт. Также будут примеры запуска проектов, сделанных на Django и Flask.
- sudo systemctl restart gunicorn – применяется если изменились какие-либо файлы Что такое Django
- sudo systemctl restart – применяются в том случае если изменились настройки Gunicorn
sudo systemctl restart gunicorn – применяется если изменились какие-либо файлы Что такое Django
sudo systemctl restart – применяются в том случае если изменились настройки Gunicorn
Из командной строки
Командная строка
(еще её называют консоль или терминал) — это программа, которая позволяет управлять компьютером через текстовые команды.
В каждой операционной системе по умолчанию установлены разные консоли, и текстовые команды могут отличаться. Ниже рассмотрим варианты запуска python-скриптов из консоли для Windows, Linux и MacOS.
Windows (cmd)
Cmd (command line interpreter) — интерпретатор командной строки в Windows. Это приложение будет расшифровывать и выполнять ваши текстовые команды (в том числе и команды на запуск python-скриптов).
2
Откройте консоль cmd: комбинация клавиш Windows+R, далее введите «cmd» и нажмите «Enter» (или через поиск по фразе «Командная строка»);
Чтобы запустить программу, нажмите «Enter». Ваша программа запущена 🎉.
💭 Чтобы каждый раз не набирать длинный путь до файла, перейдите в директорию со скриптом (команда cd) и используйте при запуске только название файла:
Linux (bash)
В разных дистрибутивах Linux используются разные командные интерпретаторы. Самые популярные — shell (Unix shell) и bash (Bourne again shell). В них мы будем писать команды для запуска python-файлов.
2
Откройте терминал: комбинация клавиш Ctrl+Alt+T (или через «Приложения» → «Терминал») [шаг для версии Linux с графическим интерфейсом];
☝️ В большинстве дистрибутивов Linux по умолчанию команда python запустит Python 2.x.x. После того как вы установите Python 3-й версии, он будет доступен через команду python3.
💭 Для удобства запуска можно сразу перейти в каталог со скриптом (команда cd) и использовать при запуске только название файла:
MacOS (bash)
В OS X по умолчанию используется командный интерпретатор bash. Процесс запуска python-скриптов такой же, как и в Linux.
☝️ Команда python запустит Python 2.x.x. (в MacOS он установлен по умолчанию). После установки Python 3-й версии используйте команду python3.
💭 Для удобства запуска перейти в каталог со скриптом (команда cd) и используйте для запуска только название файла:
Из IDE
IDE
(Integrated development environment) — интегрированная среда разработки. Простыми словами это программа, которая помогает программистам разрабатывать программный код.
- Предварительно установить интерпретатор;
- Подключить интерпретатор в IDE.
Ниже рассмотрим, как подключить интерпретатор Python к PyCharm, VSCode, Sublime Text и IDLE.
PyCharm
2
Установите PyCharm (на официальном сайте есть бесплатная версия Community Edition);
Способ #1 (для нового проекта): при создании нового проекта File → New Project PyCharm предложит:
- Использовать виртуальное окружение (например pipenv) и указать интерпретатор;
- Использовать интерпретатор без виртуального окружения.
Способ #2 (для существующего проекта): откройте проект в PyCharm и добавьте интерпретатор в настройках File → Settings → Project:<name> → Project Interpreter.
💭 Иногда PyСharm не видит интерпретатор, тогда его нужно добавить вручную. Для этого рядом со строкой выбора интерпретатора нажмите на «Add Interpreter» (или «шестеренку»). Откроется окно «Add Python Interpreter», в котором нужно указать путь до вашего интерпретатора Python.
💡 Чтобы узнать путь до python-интерпретатора, запустите в консоли python в интерактивном режиме (команда python3 или python) и выполните 2 команды:
Отобразится полный путь до интерпретатора python — скопируйте его и используйте для настройки PyCharm.
4
Создайте новый файл с расширением.py и запустите его через Run → Run… (или комбинацией клавиш Alt + Shift + F10);
Python-файл запущен 🎉. В панели слева снизу отобразится консоль с результатом выполнения программы.
💭 Для следующих запусков файла можете использовать кнопку «Play» в правом верхнем меню (или комбинацию клавиш Shift + F10).
VSCode (Visual Studio Code)
3
Установите расширение «Python» для VSCode. Для этого нужно перейти на вкладку «Extensions» (на панели слева) и найти расширение «Python».
4
Укажите в VSCode путь до python-интерпретатора. Для этого откройте командную строку VSCode комбинацией Ctrl + Shift + P (или «Шестеренка слева снизу» → «Палитра команд…»).
Далее найдите пункт «Python: Выбор интерпретатора» и в открывшемся окне выберите нужный интерпретатор.
5
Создайте новый файл с расширением.py и запустите его, нажав на значок «Play» в правом верхнем углу;
Sublime Text
3
В меню «Tools» → «Build System» выберите «Python» в качестве системы сборки.
4
Создайте новый файл с расширением.py и запустите его через меню «Tools» → «Build» (или комбинацией клавиш Crtl + B);
Если в терминале не отображается вывод скрипта, запустите его через «Tools» → «Build With…» → Python.
💡 В Sublime Text можно создать свою систему сборки через меню «Tools» → «Build System» → «New Build System…».
После создания конфигурации его необходимо сохранить по предложенному пути. Для корректной работы, конфигурация должна называться <ваше_название>.sublime-build. (например: -build.), иначе она не отобразится в меню «Build Systems».
В виртуальном окружении
Основная цель виртуального окружения — создание изолированной среды. В такой среде ваш скрипт будет использовать свои собственные зависимости, а не глобальные по умолчанию.
Venv
Venv
— это модуль для создания облегченных «виртуальных сред». Каждая такая среда будет иметь собственный независимый набор python-пакетов.
Модуль Venv входит в стандартную библиотеку Python, отдельно устанавливать его не нужно.
2
Откройте консоль (терминал) и перейдите в каталог с python-скриптом;
venv — название виртуального окружения. Если создание прошло успешно, появится новая директория venv.
- venv\Scripts\ — для Windows;
- source venv/bin/activate — для Linux и MacOS.
4
Теперь, когда виртуальное окружение активировано, можно использовать стандартную консольную команду для запуска:
Pipenv
После этого все команды будут выполняться в виртуальной среде. Для запуска используйте команду:
Способ #2 #2.
Cразу запускайте скрипты внутри virtualenv через pipenv run python:
💡 Если вы хотите, чтобы Pipenv создавал файлы виртуальной среды в текущем каталоге проекта, установите переменную среды export PIPENV_VENV_IN_PROJECT=1.
Для полного удаления файлов виртуального окружения Pipenv используйте команду:
С помощью Docker
-t — тег для Docker-образа. Если не указывать версию, по умолчанию она будет latest.
Выше мы рассмотрели простейший пример запуска python-скрипта в Docker-контейнере. Вот ссылки на более сложные варианты:
- Запустить Python через Pipenv в Docker-контейнере;
- Веб-приложение на Python (Flask, Redis) с использованием Docker Compose;
- FastAPI в Docker-контейнере;
- Django-приложение в Docker-контейнере.
Через онлайн-сервисы
Простой способ запустить скрипт без установки Python — использовать онлайн-сервисы (также их называют онлайн-компиляторы).
- Online-python;
- OnlineGDB;
- Trinket;
- Replit;
- Programiz.
2
Загрузите свой файл. Для этого нажмите на значок «Open File from Disk» в левом верхнем углу.
По двойному клику на значок файла
Данный способ работает в операционных системах с графическим интерфейсом. Подойдет тем, кто не хочет писать команды в консоли. Чтобы способ сработал, необходимо предварительно установить Python.
После создания файла с расширением.py, операционная система по умолчанию ассоциирует его с приложением Python. Чтобы запустить скрипт, кликните дважды по значку файла — запустится интерпретатор Python и выполнит ваш скрипт.
- Нажмите на значок файла правой кнопкой мыши;
- Выберите «Открыть с помощью» → «Python».
Чтобы изменить приложение по умолчанию для файлов с расширением.py (для Windows):
- Нажмите на значок файла правой кнопкой мыши;
- Выберите «Свойства» → «Приложение (Изменить…)» → «Python».
💡 При запуске скрипта данным способом, окно с результатами выполнения автоматически закроется. Чтобы избежать этого, напишите в конце своего кода input().
Часто задаваемые вопросы о фоновом запуске Python-скриптов в Linux
Вопрос: Как проверить, работает ли скрипт в фоне?
Ответ: Используйте команду ps aux | grep python или jobs -l для просмотра фоновых процессов.
Вопрос: Как остановить скрипт, запущенный через nohup?
Ответ: Найдите PID процесса через ps aux | grep script.py и выполните kill PID.
Вопрос: В чем разница между screen и tmux?
Ответ: Оба являются терминальными мультиплексорами, но tmux имеет более современный API и поддержку скриптов.
Вопрос: Как сделать так, чтобы скрипт запускался автоматически при старте системы?
Ответ: Используйте systemd-сервис, создав unit-файл в /etc/systemd/system/.
Вопрос: Можно ли запустить скрипт в фоне без nohup?
Ответ: Да, используйте оператор & в конце команды, но при закрытии терминала процесс завершится.
Вопрос: Как перенаправить вывод скрипта в файл при фоновом запуске?
Ответ: Добавьте > output.log 2>&1 перед & или в nohup.
Вопрос: Что делать, если скрипт падает с ошибкой в фоне?
Ответ: Проверьте логи (например, nohup.out) и настройте systemd для автоматического перезапуска.
Вопрос: Как запустить несколько экземпляров одного скрипта?
Ответ: Используйте screen или tmux для отдельных сессий, либо systemd с разными unit-файлами.
Вопрос: Нужно ли виртуальное окружение для фонового запуска?
Ответ: Да, это изолирует зависимости и предотвращает конфликты версий библиотек.
Вопрос: Как настроить автозапуск скрипта после сбоя?
Ответ: В systemd добавьте Restart=always в секцию [Service] unit-файла.






















