Как сделать автозапуск python программы с виртуальным окружением в фоновом режиме на линукс?



@AliminVerckon

Есть программа на python, которая использует много модулей из виртуального окружения.
Делал все по этому гайду https://losst.pro/avtozagruzka-linux?ysclid=lofmx5…
Из раздела автозагрузка скриптов в Linux
Мой скрипт

#!/bin/bash 
source /home/user/program/venv/bin/activate
sudo python3 /home/user/program//webui.py

Я очень плохо разбираюсь в скриптах линукс, прошу понять и простить)


Решения вопроса 4



@drygdryg

Можно использовать систему инициализации Systemd. Напишите unit-файл такого вида:

[Unit]
Description=My Script Service
After=multi-user.target

[Service]
User=user  # Имя пользователя, от имени которого будет запускаться команда, указанная в ExecStart
WorkingDirectory=/home/user/program  # Директория, в которую будет осуществлён переход перед запуском
ExecStart=/home/user/program/venv/bin/python /home/user/program/webui.py
Restart=always  # Всегда перезапускать скрипт при его падениях

[Install]
WantedBy=multi-user.target

и сохраните его в директории /etc/systemd/system с расширением .service, например, /etc/systemd/system/my_program.service.

Здесь не используется скрипт activate для активации виртуального окружения, но вместо этого указывается полный путь к интерпретатору Python внутри этого виртуального окружения.
Также важно указывать абсолютные пути к файлам и директориям, даже несмотря на то, что задана рабочая директория WorkingDirectory.
Если ваш скрипт опирается на сетевые соединение, в секции Unit в качестве After задайте network-online.target вместо multi-user.target:
After=network-online.target


Ответы на вопрос 0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *