PQ
PQ.Hosting

Валюта

Как запустить скрипт Python в Linux: все способы

Автор
PQ
26 февраля 2026
6 мин чтения
16 просмотров

Python есть на большинстве Linux-серверов по умолчанию. Но между «запустить скрипт вручную один раз» и «запустить правильно в нужном окружении с нужными зависимостями» — заметная разница. Разберём все варианты по порядку.

Проверить, установлен ли Python

Прежде чем запускать — стоит убедиться, что интерпретатор есть:

python3 --version

На современных дистрибутивах Python 3 доступен как python3. Команда python без цифры может указывать на Python 2 (уже не поддерживается) или отсутствовать вообще.

which python3

Покажет путь к исполняемому файлу — /usr/bin/python3 на большинстве систем.

Если Python не установлен:

sudo apt install python3        # Debian/Ubuntu
sudo dnf install python3        # Fedora/RHEL
sudo pacman -S python           # Arch Linux

Способ 1: передать скрипт интерпретатору

Самый прямолинейный вариант:

python3 myscript.py

Можно указать полный путь к скрипту:

python3 /home/user/scripts/myscript.py

Или перейти в директорию и запустить:

cd /home/user/scripts
python3 myscript.py

Передать аргументы скрипту — просто добавить их после имени файла:

python3 myscript.py arg1 arg2

Внутри скрипта они доступны через sys.argv:

import sys
print(sys.argv)  # ['myscript.py', 'arg1', 'arg2']

Способ 2: shebang — запуск без python3 в начале

Шебанг (#!) — первая строка скрипта, которая указывает системе, каким интерпретатором запускать файл. После этого скрипт можно вызывать напрямую, без явного указания python3.

Добавить в первую строку скрипта:

#!/usr/bin/env python3

/usr/bin/env python3 предпочтительнее, чем жёсткий путь /usr/bin/python3env сам найдёт интерпретатор в переменной PATH, что делает скрипт переносимым между системами.

После этого сделать файл исполняемым:

chmod +x myscript.py

Теперь запускать можно так:

./myscript.py

Или по абсолютному пути:

/home/user/scripts/myscript.py

Способ 3: запуск из любого места через PATH

Если скрипт нужен глобально — как системная команда — его кладут в директорию из переменной PATH:

sudo cp myscript.py /usr/local/bin/myscript
sudo chmod +x /usr/local/bin/myscript

Расширение .py убрано — так команда выглядит чище. Shebang внутри скрипта обязателен. После этого скрипт запускается просто:

myscript

Проверить, что директория в PATH:

echo $PATH

/usr/local/bin есть там по умолчанию на большинстве систем.

Виртуальные окружения: запуск с изолированными зависимостями

На реальных серверах скрипты редко работают без зависимостей. Устанавливать пакеты глобально через pip — плохая практика: разные проекты могут требовать несовместимые версии. Для этого существуют виртуальные окружения.

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

python3 -m venv /opt/myapp/venv

Активировать:

source /opt/myapp/venv/bin/activate

После активации python и pip указывают на версии внутри окружения:

pip install requests pandas
python myscript.py

Деактивировать:

deactivate

Запуск без активации окружения

Для скриптов, cron-задач и systemd-сервисов удобнее вызывать интерпретатор напрямую из окружения — без активации:

/opt/myapp/venv/bin/python3 myscript.py

Этот способ надёжнее в автоматизации, потому что не зависит от активации в текущей сессии.

Интерактивный режим

Флаг -i запускает скрипт и после его выполнения оставляет открытым Python REPL. Удобно для отладки — можно посмотреть значения переменных после завершения:

python3 -i myscript.py

После выполнения скрипта появится приглашение >>>, в котором доступны все переменные из скрипта.

Запуск в фоне

Чтобы скрипт продолжал работать после закрытия терминала:

nohup python3 myscript.py &

nohup защищает процесс от сигнала HUP при закрытии сессии. & отправляет в фон. Вывод по умолчанию пишется в файл nohup.out.

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

nohup python3 myscript.py >> /var/log/myscript.log 2>&1 &

Узнать PID запущенного скрипта:

pgrep -f myscript.py

Остановить:

pkill -f myscript.py

Автозапуск через cron

Для скриптов, которые нужно запускать по расписанию:

crontab -e

Примеры записей:

# Каждые 5 минут
*/5 * * * * /opt/myapp/venv/bin/python3 /opt/myapp/myscript.py

# Каждый день в 03:00
0 3 * * * /opt/myapp/venv/bin/python3 /opt/myapp/backup.py >> /var/log/backup.log 2>&1

# Каждое воскресенье в 01:00
0 1 * * 0 /usr/bin/python3 /opt/scripts/cleanup.py

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

Автозапуск через systemd (как сервис)

Для долгоживущих скриптов или демонов systemd — более правильный инструмент, чем nohup.

Создать unit-файл:

sudo nano /etc/systemd/system/myscript.service

Содержимое:

[Unit]
Description=My Python Script
After=network.target

[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/venv/bin/python3 /opt/myapp/myscript.py
Restart=on-failure
RestartSec=5
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

Активировать и запустить:

sudo systemctl daemon-reload
sudo systemctl enable myscript.service
sudo systemctl start myscript.service

Посмотреть статус и логи:

sudo systemctl status myscript.service
sudo journalctl -u myscript.service -f

Частые ошибки при запуске

python3: command not found Python не установлен или не добавлен в PATH. Установить через пакетный менеджер.

ModuleNotFoundError: No module named 'requests' Модуль не установлен в том окружении, которым запускается скрипт. Установить через pip install requests в нужном окружении — или убедиться, что используется интерпретатор из правильного venv.

Permission denied Скрипт не имеет права на выполнение. Добавить: chmod +x myscript.py. Или запускать явно через python3 myscript.py — тогда права на исполнение самого файла не нужны.

SyntaxError при запуске через python вместо python3 Скрипт написан для Python 3, а запускается Python 2. Всегда использовать python3.

Скрипт запускается, но ничего не делает в cron Скорее всего, проблема с PATH или рабочей директорией. Добавить в начало crontab: SHELL=/bin/bash и PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin. Или указывать все пути абсолютно.

Шпаргалка

Задача Команда
Запустить скрипт python3 script.py
Запустить с аргументами python3 script.py arg1 arg2
Сделать исполняемым chmod +x script.py + shebang #!/usr/bin/env python3
Запустить исполняемый ./script.py
Запустить в фоне nohup python3 script.py >> app.log 2>&1 &
Запустить в venv /path/to/venv/bin/python3 script.py
Интерактивный режим после выполнения python3 -i script.py
Посмотреть PID pgrep -f script.py
Остановить pkill -f script.py

Итог

Для разовых задач — python3 script.py. Для скриптов с зависимостями — виртуальное окружение и вызов через полный путь к интерпретатору. Для автоматизации по расписанию — cron с абсолютными путями. Для постоянно работающих процессов — systemd-сервис.

Всё это работает на любом VPS с Linux. Подобрать сервер под Python-проект можно в каталоге PQ.Hosting.

Поделиться статьей

Похожие статьи